Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 2 семестр.doc
Скачиваний:
42
Добавлен:
27.05.2015
Размер:
777.73 Кб
Скачать

5. Использование форм

Форма Form класса TForm представляет собой компонент, на котором размещаются визуальные компоненты, образующие интерфейсную часть приложения, и системные (невизуальные) компоненты. Каждое приложение может иметь несколько форм, одна их которых является главной и отображается первой при запуске программы. В начале работы над новым проектом по умолчанию первая форма делается главной (с первоначальным названием Form1). В файле проекта (DPR) эта форма создается первой, например:

Application. Initialize;

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm2, Form2);

Аррlication.Run;

Программно можно сделать главной любую форму приложения, указав вызов метода CreateForm создания этой формы первой. При конструировании приложения главную форму можно указать в окне параметров проекта, вызываемом командой Project | Options (Проект | Параметры).

Форма может быть модальной и немодальной. Немодальная форма позволяет переключиться в другую форму приложения без своего закрытия. Модальная форма требует обязательного закрытия перед обращением к любой другой форме приложения.

5.1. Свойства, методы и события форм

Метод Create служит для создания экземпляров формы, обычно предварительно описанных при конструировании приложения.

Пример создания экземпляра формы без отображения на экране:

procedure TForm1.Button1Click(Sender: TObject);

begin

Form2 := TForm2.Create(Aррliсаtion);

Form2.Caption:='Новая форма';

end;

При создании и использовании формы происходят следующие события типа TNotifyEvent, указанные в порядке их возникновения: OnCreate; OnShow; OnResize; OnActivate; OnPaint.

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

Другим способом управления видимостью форм на экране являются соответственно методы Show и Hide. Процедура Show отображает форму в немодальном режиме, при этом свойству Visible устанавливается значение True, а сама форма переводится на передний план. Процедура Hide скрывает форму, устанавливая ее свойству Visible значение False.

Пример отображения и скрытия форм:

procedure TForm1.btnShowFormsClick(Sender: TObject);

begin

Form2.Visible := true;

Fоrm3.Show;

end;

procedure TForm1.btnHideFormsClick(Sender :ТОbjесt);

begin

Form2.Visible := false;

Form3.Hide;

end;

Событие OnCreate при создании формы возникает один раз, остальные события происходят каждый раз при отображении формы, при ее активизации и прорисовке соответственно. В обработчик события OnCreate обычно включается код, выполняющий начальную инициализацию формы в дополнение к установленным на этапе разработки приложения параметрам. Кроме того, в обработчик включаются дополнительные операции, которые должны происходить однократно при создании формы.

Пример процедуры обработки события OnCreate формы Form2

procedure TForm2.FormCreate(Sender :TObject);

begin

Form2. Сарtiоn:= 'Пример формы';

ComboBox2.Items.LoadFromFile('list.txt'); // чтения текста из файла и загрузка в список

Button3.Enabled := false; // кнопка Button3 блокируется

end;

Событие OnShow возникает в момент отображения формы на экране (свойство Visible принимает значение Тruе). Событие OnHide возникает при скрытии формы (свойство Visible принимает значение False).

Событие OnActivate возникает при получении фокуса ввода формой, например, при нажатии кнопки мыши в области формы, происходит ее активизация. Событие OnDeActivate возникает при потере фокуса формой.

Событие OnPaint возникает при необходимости перерисовки формы, например, при активизации формы, если до этого часть ее была закрыта другими окнами.

Метод Close используется для закрытия формы. Процедура Close делает форму невидимой, не уничтожает созданный ее экземпляр, и форма может быть снова вызвана на экран, например с помощью методов Show или ShowModal.

При закрытии главного окна приложения прекращается работа всего приложения, при этом также закрываются все другие окна приложения.

Пример закрытия формы:

procedure TForm2.btnCloseClick(Sender: TObject);

begin

Form2.Close;

end;

Метод Free выполняет уничтожение формы, после чего работа с этой формой невозможна, и любая попытка обратиться к ней или ее компонентам вызовет исключительную ситуацию (ошибку). Необходимость уничтожения формы может возникнуть при оформлении заставок или при разработке больших приложений, требующих экономии оперативной памяти.

Пример удаления экземпляра формы:

procedure ТFоrm3.btnDestroyClick(Sender: TObject);

begin

Form3.Free;

end;

При закрытии и уничтожении формы происходят следующие события, указанные в порядке их возникновения: OnCloseQuery; OnС1оsе; OnDeActivate; OnHide; OnDestroy.

Событие OnCloseQuery типа TCloseQueryEvent возникает в ответ на попытку закрытия формы. Обработчик события получает логическую переменную-признак CanClose, определяющую, может ли быть закрыта данная форма.

По умолчанию эта переменная имеет значение True, и форму можно закрыть.

Если установить параметру CanClose значение False, то форма остается открытой. Такую возможность можно использовать, например, для подтверждения закрытия окна или проверки, сохранена ли редактируемая информация на диске. Событие OnCloseQuery вызывается всегда, независимо от способа закрытия формы.

Пример процедуры закрытия формы:

procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

CanClose := MessageDlg('Вы хотите закрыть форму?', mtConfirmation, [mbYеs, mbNo], 0)

= mrYes;

end;

При закрытии формы Form2 выдается запрос на подтверждение операции, который

представляет собой модальное диалоговое окно с текстом "Вы хотите закрыть форму?" и двумя кнопками – Yes и No. В случае подтверждения нажатием кнопки Yes форма закрывается, в противном случае закрытия формы не происходит.

Событие OnClose типа TCloseEvent возникает непосредственно перед закрытием формы. Обычно оно используется для изменения стандартного поведения формы при закрытии. Для этого обработчику события передается переменная Action типа TCloseAction, которая может принимать значения:

caNone – форму закрыть нельзя;

caHide – форма делается невидимой;

caFree – форма уничтожается, а связанная с ней память освобождается;

caMinimize – окно формы минимизируется.

При закрытии окна методом Close переменная Action по умолчанию получает значение caHide, и форма делается невидимой. При уничтожении формы, например, методом Destroy, переменная Action по умолчанию получает значение caFree, и форма уничтожается. Когда закрывается главная форма приложения, все остальные окна закрываются без вызова, события OnClose.

Пример процедуры закрытия формы:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

if Меmo1.Modified then Action:=caNone

else Action caHide;

end;

При закрытии формы Form2 проверяется признак модификации содержимого редактора Memo1. Если информация в Memo1 была изменена, то форма не закрывается.

Cобытие OnResize типа TNotifyEvent возникает при изменении размеров формы в процессе выполнения приложения. Например, в обработчике этого события может выполняться изменение положения и размеров управляющих элементов окна, не имеющих свойства Align.

Стиль формы определяется свойством FormStyle типа TFormStyle, принимающим следующие значения:

fsNormal – стандартный стиль, используемый для большинства окон, в том числе и

диалоговых;

fsMDIChild – дочерняя форма в многодокументном приложении;

fsMDIForm – родительская форма в многодокументном приложении;

fsStayOnTop – форма, которая после запуска всегда отображается поверх других окон.

Обычно используется при выводе системной информации или информационной панели программы (заставки).

Свойство BorderStyle типа TFormBorderStyle определяет вид и поведение ограничивающей рамки и может принимать следующие значения:

bsDialog – диалоговая форма;

bsSingle – форма с неизменяемыми размерами;

bsNone – форма не имеет видимой рамки и заголовка и не может изменять свои размеры. Часто используется для заставок;

bsSizeable – обычная форма с изменяемыми размерами (по умолчанию). Имеет строку заголовка и может содержать любой набор кнопок;

bsToolWindow – форма панели инструментов;

bsSizeToolWin – форма панели инструментов с изменяемыми размерами.

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

Невозможность изменения размеров форм некоторых стилей относится только к пользователю – нельзя с помощью мыши передвинуть границу формы.

Программно при выполнении приложения для формы любого стиля можно устанавливать различные допустимые размеры окна.

Пример изменения размеров формы:

procedure TForm2.btnResizeFormClick(Sender: TObject);

begin

Form2.Width :=Form2.Width + 100; // увеличение ширины формы на 100 пикселей

end;

Если установить диалоговый стиль формы, то она не становится модальной и позволяет пользователю переходить в другие окна приложения.

Свойство BorderIcons типа TBorderIcons определяет возможный набор кнопок в области заголовка окна:

biSystemMenu – кнопка системного меню;

biMinimize – кнопка минимизации (свертывания);

biMaximize – кнопка максимизации (восстановления);

biHelp – кнопка справки, которая отображает вопросительный знак и вызывает контекстно-зависимую справку.

Форма включает клиентскую и неклиентскую области. Неклиентская область занята рамкой, заголовком и строкой главного меню. В клиентской области обычно размещаются различные управляющие элементы, происходит вывод текста или отображение графики. Аналогично тому, как свойства Width и Height определяют размеры всей формы, свойства ClientWidth и ClientHeight типа Integer задают соответственно ширину и высоту в пикселях клиентской части формы.

Пример вывода в заголовке формы информации о размерах ее клиентской области:

procedure TForm1.FormCreate (Sender: TObject);

begin

Form1.Caption := 'Клиентская область – ' + IntToStr(Form1.ClientWidth) +' х '+

IntToStr(Form3.ClientHeight);

end;

Свойство Меnu типа TMainMenu задает отображаемое формой меню. При разработке приложения размещение компонента MainMenu главного меню на форме вызывает присвоение значения (Menu:=MainMenu1) свойству Menu формы, что отображается в Инспекторе объектов.

Cвойство Icon типа TIcon определяет пиктограмму формы в левой стороне области заголовка. Для любой формы свойство Icon можно задать с помощью Инспектора объектов или динамически. Если пиктограмма не задана, то форма использует пиктограмму, указанную в свойстве Iсоn объекта Application.

Пример динамической загрузки пиктограммы:

procedure TForm1.FormCreate (Sender: TObject);

begin

Form1.Icon.LoadFromFile('C:\Picture1.ico');

end;

Свойство Position типа TPosition определяет размещение и размер формы при отображении. Свойство имеет следующие основные значения:

poDesigned – форма отображается в той позиции и с теми размерами, которые были установлены при ее конструировании (значение по умолчанию). Если приложение запускается на мониторе с более низким разрешением, чем тот, на котором оно разрабатывалось, часть формы может выйти за пределы экрана;

poScreenCenter – форма выводится в центре экрана, ее высота и ширина (свойства

Height и Width) не изменяются;

poDefault – Windows автоматически определяет начальную позицию и размеры формы,

при этом программно нет возможности контролировать эти параметры. Данное начение не допускается для форм многодокументных приложений;

poDefaultPosonly – Windows определяет начальную позицию формы, ее размеры не изменяются;

poDefaultSizeOnly – Windows определяет начальные ширину и высоту формы и помещает форму в позицию, определенную при разработке.

Свойство Active типа Bооlеаn позволяет определить активность формы.

Если свойство Active имеет значение True, то форма активна. Это свойство относится ко времени выполнения и доступно для чтения. Если требуется активизировать форму программно, следует использовать свойство WindowState или метод Show (ShowModal).

Свойство WindowState типа TWindowState определяет состояние отображения формы и может принимать одно из трех значений:

wsNormal – обычное состояние (по умолчанию); wsMinimized – минимизация; wsMaximized – максимизация.

Пример управления состоянием формы:

procedure TForm1.btnMiniFormClick(Sender: TObject);

begin

Form2.WindowState := wsMinimized;

end;

Свойство ActiveControl типа TWinControl определяет элемент формы, находящийся в фокусе управления (активный). Например,

Forml.ActiveControl := Edit2;

Эту же операцию выполняет метод SetFocus, который устанавливает фокус ввода на оконный элемент управления, например: Edit2.SetFocus;

Свойство AutoScroll типа Boolean определяет автоматическое появление полос прокрутки. Если свойство AutoScroll имеет значение False, то управление горизонтальной и вертикальной полосами прокрутки осуществляют свойствами HorzScrollBar и VertScrollBar типа TControlScrollBar.

Метод ScrollInView (AControl: TControl) автоматически изменяет позиции полос прокрутки так, чтобы заданный параметром AControl управляющий элемент стал виден в отображаемой области.

Свойство KeyPreview типа Boolean устанавливает обработку события клавиатуры сначала для формы, а затем для элементов управления формы. Если свойство имеет значение False (по умолчанию), то клавиатурные события поступают к активному элементу управления.

Пример обработки формой нажатия алфавитно-цифровых клавиш:

// Не забудьте установить свойству KeyPreview значение True

Procedure TForm1.FormKeyPress(Sender: TObject; var Кеу: Char);

begin

МеssаgеDlg('Нажата клавиша ' + Key, mtInformation, [mbОК], 0);

end;