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


 

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

57693. Сучасний Лондон 352 KB
  Today we are going to speak places of interest in London. You’ll watch a Computer presentation on the topic and we’ll discuss it. By the end of the lesson you will be able to speak about London
57694. Love and Marriage 56.5 KB
  We will lern some trditions discuss them nd write legend tht is worth of speking in every ge t the beginning lets mke up poem look t my sheet of pper nd drem bout love nd mke up poem...
57695. Здоровий спосіб життя 51.5 KB
  Practical: to train in listening comprehension; to develop communicative skills, using active lexis on the topic, to work with video material, to gain pupils experience be finding necessary materials from various sources.
57696. My Favourite Recipe 63 KB
  The theme of the lesson is “Food in Our Life” and the motto is “You are what you eat”. And today we’ll practice telling favourite recipes. So you’ll develop speaking skills, speech competence, practice reading for specific information, practice and develop listening skills.
57697. Подорож до Шотландії 92 KB
  I think these words can be the motto of our lesson. Lets try to prove that Clarke was really right. What do you think about this quotation? How do you understand these words? What's your opinion?
57698. Geographical Position and Climate of Ukraine 846.5 KB
  Educational aim: To develop the chief traits of a persons character: tolerance, kindness, politeness, honorable attitude towards the country you live in and people living here.
57699. Daily, Weekly, Monthly. Press 1.24 MB
  I think you would know that by the end of our lesson you would be able to get information about some differences between English, American and Ukrainian press through reading and listening.
57700. We are different. Getting along with others. Мы – разные. Учимся ладить друг с другом 211.5 KB
  Duncan is 18. He has just left school and is going to university in the autumn. When you first meet him he appears to be a little cold and arrogant. As you get to know him you discover that he has a warm and friendly personality.
57701. Welcome to Great Britain 85 KB
  Good morning, dear children! I am glad to see you! I hope everyone is feeling fit. I think you will agree that the topic we are going to speak on is really worth discussing. Because we can’t imagine our life without many of things, and one of them is travelling.