10226

Работа с формами. Свойства TForm

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа № 3 Работа с формами. Свойства TForm Цель работы: изучить основные свойства класса TForm познакомится с некоторыми событиями форм; научиться использовать формы разных стилей в windowsприложениях. Форма представляет собой фундамент программы на котор

Русский

2013-03-24

166.5 KB

2 чел.

Лабораторная работа № 3 

Работа с формами. Свойства TForm 

Цель работы: изучить основные свойства класса TForm, познакомится с некоторыми событиями форм; научиться использовать формы разных стилей в windows-приложениях.

Форма представляет собой фундамент программы, на котором строится все остальное. Форма — это место, где пользователь общается с программой. Любая программа имеет как минимум одну связанную с ней форму, которая называется главной – эта форма появляется на экране в момент старта программы. Приложение может иметь несколько форм, каждая из которых выполняет свое особое предназначение. Delphi инкапсулирует концепцию форм в класс TForm, и каждая форма, создаваемая с помощью конструктора форм (Form Designer), наследует основные свойства, методы и события этого класса.

Свойства TForm 

Класс TForm предоставляет возможность изменять его поведение и внешний вид формы с помощью ряда свойств.

Active. Свойство Active определяет, имеет ли форма фокус ввода. Если имеет, оно возвращает True, если нет False. Windows выводит заголовок активной формы цветом, отличающимся от цвета неактивных. Неактивные окна продолжают получать сообщения о перемещении и выборе мыши. Независимо от типа приложения в один момент времени может быть активной только одна форма. Вы можете обратить внимание на то, что заголовок родительской формы в MDI-приложении изображен "активным" цветом. Не попадитесь на эту удочку - свойство Active родительского MDI-окна, никогда не бывает равным True.

ActiveForm. Свойство ActiveForm класса TScreen, возвращает форму, которая в данный момент имеет фокус ввода.

ActiveControl. Свойство ActiveControl указывает на потомка TWinControl, имеющего в настоящий момент фокус ввода. Вы можете установить значение во время создания программы, определив, какой элемент будет иметь фокус ввода при инициализации формы. Назначение ActiveControl во время работы программы - установка фокуса ввода в поле с некорректно введенными данными. Приведенный ниже фрагмент кода позволяет проверить текст, введенный в элемент Edit1, перед закрытием формы.

procedure TDataEntryForm.FormCloseQuery(Sender:Tobject; var CanClose: Boolean);

begin
    {Проверяем, введен ли текст в элемент.}
      if
Edit1.Text = '' then
      begin
          {Запрещаем закрытие.}
          CanClose:= False;
          {Устанавливаем фокус в поле с некорректными данными.}
          ActiveControl:=
Edit1;
      end;
end;

SetFocus. Для того, чтобы передать фокус ввода какому-либо визуальному компоненту пользуются методом SetFocus. Например: Edit1.SetFocus. Метод SetFocus потомков TWinControl обновляет свойство ActiveControl.

Большинство событий передает параметр Sender своему обработчику. Sender определяет, какой элемент обнаружил событие и запустил обработчика.

AutoScroll, HorzScrollBar и VertScrollBar. Свойство AutoScroll управляет появлением полос прокрутки в форме, размеры которой не позволяют вывести все ее элементы одновременно. Если свойство равно True, и вы изменили размеры так, что не все элементы формы видны, в форме автоматически появляются полосы прокрутки. Если же значение свойства— False, вы теряете доступ к элементам формы, не поместившимся на экране
(компонент
 TScrollBar, позволяет прокручивать форму независимо от свойства AutoScroll).

Вы можете управлять полосами прокрутки с помощью свойств HorzScrollBar и VertScrollBar. Это весьма полезно в программах, реализующих свойство распахивания окна. Поскольку размеры выводимой диаграммы могут быть больше размеров формы, а выводите вы ее самостоятельно, AutoScroll не активизируется, и вам следует обеспечить прокрутку и рисование, самому. Вот пример такого кода, обеспечивающего прокрутку в двойном размере формы.

{Устанавливаем диапазон вертикальной прокрутки.}
VetrScrollBar.Range:=Height * 2;
{Показываем вертикальную полосу прокрутки.}
VertScrollBar.Visible:=True;
{Устанавливаем диапазон горизонтальной прокрутки.}
HorzScrollBar.Range:=Width * 2;
{Показываем горизонтальную полосу прокрутки.}
HorzScrollBar.Visible:=True;

BorderIcons.  Свойство Borderlcons представляет собой набор логических значений, использующийся для определения набора пиктограмм в заголовке формы.
Значения biMinimize и biMaximize создают пиктограммы, которые позволяют свернуть и развернуть форму с помощью мыши. Для того чтобы значения biMinimize и biMaximize работали, необходимо установить свойство BorderStyle равным bsSizeable или bsSizeToolWin. Значение biHelp выводит кнопку с вопросительным знаком. Щелчок на ней вызывает контекстно-зависимую справку, которая выводится, как текст подсказки Hint, т.е. без вызова Windows Help. Значение biSystemMenu создает слева от заголовка пиктограмму, позволяющую вызывать системное меню, как показано на рисунке.

   

Для того чтобы значения biMinimize, biMaximize и biHelp работали, необходимо присвоить свойству заметку BorderIcons значение biSystemMenu.

BorderStyle. Свойство BorderStyle перечислимого типа позволяет определить:

  •  вид заголовка формы
    •  доступные кнопки в заголовке формы
      •  отображение строки меню
        •  поведение границ формы

    На рисунке показана форма для шести значений BorderStyle.  

 

По умолчанию свойство BorderStyle имеет значение bsSizeable, создающее обычное окно с изменяемыми размерами. Такое окно имеет стандартную строку заголовка и не имеет ограничений на расположение в ней кнопок. Примеры таких окон - программы Explorer и Notepad.

Значение bsDialog создает диалоговое окно, которое используется, когда программа требует от вас ответа для продолжения выполнения программы или для вывода информации, 16-разрядные версии Windows выводили такое окно как окно с широкой границей того же цвета, что и заголовок. Сейчас, если вы будете следовать новому трехмерному интерфейсу, границы окна будут выглядеть так же, как границы обычного окна! Видимое различие между стандартными и диалоговыми окнами в связи с тем, что последнее не может изменять размеры, состоит лишь в том, что указатель мыши не изменяется при пересечении рамки окна. Значения biMinimize и biMaximize свойства Borderlcons не будут работать, если свойство BorderStyle установлено равным bsDialog.

Третий по популярности стиль окон - bsSingle, создающий форму, которая не может изменять размеры во время работы. В отличие от bsDialog, bsSingle не запрещает установку любых пиктограмм. Единственное ограничение состоит в том, что кнопка сворачивания окна, будучи выведенной, является недоступной (блокированной). Пример такой программы- Calculator.

Окно в стиле bsSizeToolWin может изменять размеры и не имеет кнопок biMinimize, biMaximize HbiHelp. Окно в стиле bsToolWindow действует так же, но не позволяет изменять размеры.

Стиль bsNone создает окно без рамки и заголовка. Такое окно не рекомендуется использовать в качестве стандартного или диалогового, однако оно может быть полезным в программах сохранения экрана или заставках.

Если вы выбрали для свойства BorderStyle значение, создающее окно с разрешенным изменением размеров, Delphi автоматически установит значение AutoScroll равным True. Формы со стилями bsDialog и bsNone не могут иметь строки меню.

Height и Width.  Эти свойства определяют высоту и ширину формы в пикселях и обычно используются для изменения размеров формы во время работы на дисплеях разной разрешающей способности. Вот пример увеличения размеров формы до размеров всего экрана.

   {Перемещаем форму в верхний левый угол экрана.}
    Left:= 0;
    Тор:= 0;
    {Изменяем размеры формы.}
    Width:= Screen.Width;
    Height:=Screen.Height;

(Класс
TScreen, о котором будет сказано ниже, и его экземпляр Screen предоставляют доступ к информации о размерах всего экрана.)
Приведенный код, конечно, работает, но плохо, так как требуется четыре обновления формы. На самом деле лучше использовать метод SetBounds, определенный у потомков TWinControl:
   
SetBounds(0, 0, Screen.Width, Screen.Height); 

ClientHeight и ClientWidth. Окно состоит из двух частей — клиентской и не клиентской. Обычно приложение выводит изображения только в клиентской области, размер которой возвращается через свойства ClientHeight и ClientWidth. Обычно эти свойства используются для того, чтобы убедиться, что в форме может выводиться весь объект определенного размера. Показанный ниже текст приводит размер клиентской области формы в соответствие размерам изображения, содержащегося в компоненте TImage, ImgPicture.
 
  with imgPicture.Picture do
    begin
       ClientWidth:= Width; {
Изменение размера.}
       ClientHeight:= Height;
    end;

FormStyle.   Свойство FormStyle перечислимого типа определяет, как форма взаимодействует с вашим приложением и Windows. Существует два основных стиля форм — MDI (Multiple Document Interface — многодокументный интерфейс) и не MDI. Имеется два MDI-стиля (fsMDIForm и fsMDIChild), которые рассматриваются ниже. Не MDI формы существуют также в двух вариантах— fsNormal и fsStayOnTop. Наиболее популярен стиль fsNormal, который создает стандартный стиль, используемый для диалогов, панелей инструментов и SDI-приложений. Стиль fsStayOnTop применяется реже и создает форму, всегда остающуюся поверх других форм и приложений, что может быть полезно при выводе системной информации и использовании ресурсов. Примером такого окна является окно программа Chat, используемой при работе в сети. Вот как можно реализовать, подобно программе Chat, установку вывода поверх других окон путем выбора пункта меню.

    procedure TFormI.mnuAlwaysOnTopClick(Sender: TObject);
    begin
       with mnuAlwaysOnTop do
       begin
          {
Переключаем отметку выбора пункта меню.}
           Checked:= not Checked;
          {
Проверка установок меню.}
           if Checked then (
Устанавливаем стиль fsStayOnTop)
                   FormStyle:= fsStayOnTop
           else {
Возвращаем нормальный стиль}
                   FormStyle:= fsNormal;
       end;
    end;

Изменение свойства FormStyle вызывает событие OnShow.

Icon.  Свойство Icon определяет пиктограмму, выводимую Windows при сворачивании вашей формы. В интерфейсе Windows 9x эта пиктограмма также выводится в левом верхнем углу формы на кнопке системного меню. Если вы не определите значения для этого свойства, будет использоваться свойство Icon глобального объекта Application.

KeyPreview. Объект TForm наследует от класса TWinControl обработку событий OnKeyDown, OnKeyUp и OnKeyPress, и свойство KeyPreview определяет ситуации, в которых эти сообщения запускаются (события, возникающие при нажатии пользователем любой клавиши, OnKeyDown, OnKeyUp и OnKeyPress подробно будут рассмотрены в следующей работе).

Если значение KeyPreview равно False, события клавиатуры пересылаются только тому управляющему элементу, который имеет фокус ввода. В неординарном случае, когда в форме нет управляющих элементов, событие передается форме. Если же значение свойства установлено равным True, событие сначала пересылается форме, а затем - управляющему элементу, имеющему фокус ввода.

Поскольку клавиша <Tab> используется для передачи фокуса другому управляющему элементу, она не вызывает генерации события.

Обычно свойство используется KeyPreview для обработки функциональных клавиш, которые должны быть переданы форме независимо от текущего активного элемента.
Без этого свойства обработка функциональных клавиш сводится к написанию для каждого элемента дополнительного обработчика, который должен отслеживать нажатие функциональных клавиш. Более элегантным является использование разделяемого обработчика событий, так что лучше всего применять свойство KeyPressed.
При этом все нажатия клавиш отсылаются обработчикам событий OnKeyDown, OnKeyUp и OnKeyPress автоматически и для "отлова" функциональной клавиши надо написать только один обработчик события OnKeyDown формы. Вот пример закрытия формы при нажатии клавиши F2.

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;     Shift: TShiftState):

begin
{Проверить, нажата ли клавиша
F2}

if Key = VK_F2 then {Закрыть форму при нажатии на F2}

Close;

   end;

Рассматривая принцип работы этого кода, имейте в виду, что события OnKeyDown и OnKeyUp используют виртуальные коды (все они перечислены в файле WINDOWS.PAS).

Position. Position — это свойство перечислимого типа, определяющее размещение формы при запуске приложения. Значение по умолчанию (poDesigned) заставляет форму выводиться в месте, определенном при разработке приложения. Положение и размер формы при этом берутся из свойств Left, Top, Height и Width. Поскольку вы не можете знать заранее, в какой системе будет запущено ваше приложение, может оказаться, что на мониторе с низким разрешением при использовании этого значения свойства будет видна только часть формы. Более полезно значение poScreenCenter, использующее заданные вами при создании приложения значения Width и Height, но оно так изменяет Left и Тор, что форма выводится в центре экрана. Если вы установите Position равным poDefault, Windows автоматически установит размеры и положение формы, но вы при этом лишитесь возможности контролировать ее размеры. Можете создать форму размером 200х200, которая будет выведена как 640х480. Из-за этого, в частности, не допускается применение данного значения для MDI-форм. Значение poDefaultPosOnly более полезно, так как оно автоматически определяет расположение формы, но не ее размеры (а потому рекомендуется для MDI-форм, в которых требуются определенные размеры дочерних форм). Последнее значение свойства (poDefaultSizeOnly) автоматически определяет размер, но не расположение формы. Это значение может использоваться там, где важно положение формы на экране, а не ее размер. Хотя свойство Position позволяет определить, каким образом будет выводиться форма, профессионально сделанные приложения сами запоминают свое расположение на экране и при следующем запуске выводятся в той же позиции и с тем же размером. Это осуществимо, например, благодаря записи положения окна в Registry или в INI-файле, в том же каталоге, где находится приложение.

WindowState. Свойство перечислимого типа WindowState определяет состояние окна - свернутое, развернутое или нормальное. По умолчанию оно имеет значение wsNormal (при этом окно выводится в состоянии, определяемом свойствами Position, Left, Top, Height и Width). Чтобы свернуть или развернуть форму, используются значения wsMinimize и wsMaximize. Для сворачивания формы можно воспользоваться методом Minimize главного объекта приложения Application:  Application.Minimize.

В репозитарии Delphi хранится множество стандартных форм заготовок, предназначенных для решения конкретных задач (File\New).

Задания на разработку

1. Создайте приложение, окно которого имеет фиксированные размеры и фокус ввода при запуске принадлежит одному из трех компонентов класса TEdit, помещенных на форму.

2. Создайте окно - заставку. Окно формы выводите в центре экрана. У окна должен отсутствовать заголовок. В центре формы установите панель, на которой выведите сообщение "Hello World!".

3. Создайте приложение, которое при нажатии на кнопки класса TButton изменяет положение окна. Результат сравните с примером, который находится в каталоге с лабораторной работой \Example1.

4. Создайте приложение, перемещающее случайным образом  объект класса TPanel, при нажатии на него. Рассмотрите случай, когда границы панели выходят за пределы окна. Создайте, используя TCheckBox, возможность выбора: показывать или нет полосы прокрутки окна; позволять или нет панели выходить за пределы окна. Результат сравните с примером, который находится в каталоге \Example2.

5. Создайте приложение, которое при запуске сворачивается (разворачивается на полное окно), завершает свою работу при нажатии на клавишу F10,  при нажатии на кнопку сворачивается (разворачивается на полное окно). Результат сравните с примером, который находится в каталоге \Example3.

Контрольные вопросы

  1.  Для чего предназначены формы, как они описываются в среде Delphi?
  2.  Для чего используется параметр Sender в процедурах обработки событий?
  3.  Как определить, какой в данный момент компонент может принимать вводимую информацию?
  4.  Как определить, какая из форм приложения активна?
  5.  Какими свойствами описывается заголовок формы?
  6.  Что входит в клиентскую часть приложения? Как определить ее ширину и высоту?
  7.  Какие стили форм используются в Windows? Как они задаются в Delphi?
  8.  Как происходит обработка событий нажатий на клавиши клавиатуры формой и ее элементами?
  9.  Как задать позицию окна в процессе работы приложения?


 

А также другие работы, которые могут Вас заинтересовать

80627. Здравствуй, гостья Зима! 33.5 KB
  Выпал пушистый снег. На дворах и домах Снег лежит полотном И от солнца блестит Разноцветным огнем. Как в третьей строфе поэт называет снег С чем он его сравнивает Здесь художник использует такое средство художественной выразительности как сравнение когда один объект сравнивается с другим...
80628. Поняття про мову. Українська мова – державна мова України 49.5 KB
  Мета: Розширити уявлення учнів про мову як найважливіший скарб українського народу, про існування різних мов; вчити спостерігати за звучанням, написанням і значенням слів у споріднених мовах. Розвивати усне мовлення учнів, каліграфічні навички письма, поширювати словниковий запас учнів.
80629. Квіти. Музика П.І. Чайковського «Вальс квітів» 46.5 KB
  Удосконалювати техніку читання прозових творів насичених діалогами; продовжувати навчати учнів сприймати на слух, вчити голосом, інтонацією передавати настрій дійових осіб; визначати головного герою, спостерігати за його вчинками. Розширювати коло морально-етичних понять про добро, людяність, красу.
80630. Андрій М’ястківський. Казка про яблуню 89.5 KB
  Мета. Удосконалювати навички усвідомленого, виразного читання художніх творів; формувати вміння знаходити за допомогою вибіркового читання уривки тексту, що характеризують дійових осіб; виховувати працелюбність, бажання вивчати і допомагати природі.
80631. Гори України. Карпати. Рослини і тварини Карпат 49 KB
  Продовжити формувати поняття гори розкрити залежність природи гір від їхньої висоти; ознайомити учнів з характерними особливостями Карпатських гір географічним положенням кліматом рослинним і тваринним світом корисними копалинам; розвивати спостережливість...
80632. Урок розвитку зв’язного мовлення. Письмовий переказ тексту за складеним планом 28 KB
  Мета: Вчити учнів письмово передавати зміст тексту за складеним планом. Розвивати мовлення, збагачувати словниковий запас. Розвивати увагу, пам’ять, мислення. Виховувати любов до природи, бажання допомагати пташкам взимку.
80633. Загальне поняття про дієслово як частину мови 71.5 KB
  Мета: розширити й поглибити знання учнів про граматичні ознаки дієслова; формувати уміння розпізнавати дієслова серед інших частин мови; вчити доцільно і правильно вживати дієслова у мовленні; розвивати творчу уяву, виховувати любов до рідної землі.
80634. Рослини – обереги, символи 36.5 KB
  Обладнання: виставка українських оберегів; обереги-рослини. Діти батьківська хата мамина пісня бабусина вишиванка - усе це непересічні символиобереги нашого народу. А як виглядає вишиванка відповіді дітей А чи однаково розшиті чоловічі та жіночі сорочки відповіді дітей...
80635. Урок-конкурс знавців української мови у 3 – 4 класах 36 KB
  Мета: Виховувати любов до рідної мови, рідного краю, його традицій, почуття поваги до всього свого, українського, вдосконалювати мовну культуру учнів, збагачувати їхній словниковий запас, бажання розмовляти рідною мовою.