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.  Как задать позицию окна в процессе работы приложения?


 

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

56292. Сценарий праздника «Прощание с начальной школой» 75.5 KB
  Мы первым предоставляем вам слово поздравить наших выпускников. Наши звезды – выпускники 4 класса. Исполнение песни Танцуй сидя Ведущие: А сейчас предлагаем вашему вниманию передачу Умники и умницы выходят...
56293. Сценарій шкільного заходу «Любіть Україну!» 53.5 KB
  Мета: поглибити знання дітей про традиції українського народу, історію, географію України; розвивати пам’ять, логічне мислення, мову; збагачувати словниковий запас; прищеплювати любов до рідної землі,повагу до народних традицій; виховувати гідних громадян своєї Батьківщини; почуття гордості за Україну.
56294. Сценарій новорічного свята для початкових класів „Казкова феєрія” 108.5 KB
  В чудеса не вірять діти Бо відомо всім давно Що чудес ніде не стріти Крім казок і крім кіно. ВЕДУЧИЙ: Діти а кого немає на нашій ялинці Діда Мороза. Діти кличуть. Відгадайте діти мої загадки: Крешуть лід ріжуть лід залишають дивний слід.
56295. Батько і мати – два сонця гарячих (Сценарій виховного заходу) 86 KB
  Цей виховний захід повинен спрямувати молоде покоління на ствердження в їхній свідомості почуття власної гідності вірності рідній Батьківщині свободі і тверезості дій у думках і вчинках.
56296. Сценарій вечора «Муза кохання» 129.5 KB
  Мета: познайомити учнів з історіями кохання видатних особистостей, зі зразками інтимної лірики; прищеплювати інтерес до поезії, розвивати любов до мистецтва слова; показати учням красу та складність людських почуттів;
56297. Сценарій новорічного свята для учнів 3-5 класів «У гостях у цариці Природи» 57 KB
  Мета: Виховувати любов та ціннісне ставлення до природи. Розвивати інтерес до поезії. Тренувати навички декламування та інсценізації. Залучати дітей до колективної творчої праці. Формувати естетичні уподобання.
56298. МЕТОДОЛОГІЧНЕ ЗАБЕЗПЕЧЕННЯ ПРОЦЕСУ НАУКОВОГО ДОСЛІДЖЕННЯ 15.92 KB
  Поняття «методика» - це сукупність прийомів, способів дослідження, порядок їх застосування та інтерпретації отриманих за їх допомогою результатів. Основними компонентами методики є: теоретична частина; досліджувані явища (предмети), субординація і координація звязку між ними; сукупність методів; порядок їх застосування; порядок і техніка узагальнення результатів дослідження.
56299. Сценарии праздников в начальной школе 336.5 KB
  Всем красавицам желаю доброго вечера А что ж ты меня Оксанка дома не встретила Я уж возле твоей хаты час целый ошиваюсь А ты как ни в чем не бывало с подружками гуляешь. Оксана Ойли велика беда А может я забыла О чем с тобой Вакула вчера говорила.
56300. Чотири пори року. Виховний захід 103 KB
  Святково прикрашений зал Заходять ведучі Вед 1 :Добрий день шановні гості. Сьогодні ми зібралися щоб згадати добрим словом рік який минає Вед 2: Згадати і подякувати кожній порі року за їх дарунки природі і людям Вед 1: А ще згадати як веселився і зустрічав весну літо осінь і зиму український народ багато років тому.