Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laboratornye_Delphi.doc
Скачиваний:
16
Добавлен:
17.05.2015
Размер:
2.78 Mб
Скачать

Многооконные приложения

Многооконное приложение может работать одновременно с несколькими различными документами (объектами). В таком приложении главное окно содержит дочерние окна, размещенные в его пределах. В дочерних окнах обычно выполняется просмотр и редактирование документов.

Многодокументное приложение имеет одну главную форму, внутри которой может размещаться несколько дочерних окон. Тип окна (главное или дочернее) определяется свойством Formstyle, которое может принимать значения:

  • fsMDiForm — для главной формы приложения;

  • fsMDichild — для дочерних окон.

При разработке приложения описываются классы форм главного и одного до­чернего окна. По умолчанию в проекте предусматривается автоматическое соз­дание и отображение этих форм на экране после запуска приложения. Осталь­ные дочерние окна (второе, третье и т. д.) должны динамически создаваться программным способом.

В процессе выполнения программы можно динамиче­ски создавать требуемое число экземпляров дочерней формы, например:

fmChild:=TfmChild.Create(Application) ;

fmChild.Caption:='Hoвoe дочернее окно';

После создания новой формы ее имя (в примере fmChild) указывает на экземп­ляр последней созданной формы. Для доступа ко всем дочерним формам используют свойство MDIChildren [I: Integer] типа TForm главной формы приложения.

Это свойство является массивом, который содержит дочерние окна многодокументного приложения. Нумерация окон начинается с нуля, нуле­вой номер имеет верхнее окно. Число дочерних окон многодокументного приложения оп­ределяется свойством MDIChildCount типа Integer.

Например, в процедуре

procedure TfmMain.mnuNuitiberClick(Sender: TObject) ;

var n: integer;

begin

for n:=0 to fmMain.MDIChildCount-1 do

fmMain.MDIChildren[n].Caption:='OKHO номер '+IntToStr(n); end;

в названия дочерних окон приложения выводятся номера этих окон (в свойстве MDichildren главной формы fmMain приложения).

Для доступа к активному дочернему окну удобно использовать свойство ActiveMDichild типа TForm главной формы. Это свойство определяет, какое до­чернее окно находится в фокусе, и его можно использовать, например, для за­крытия окна.

Так, например, в процедуре

procedure TfmMain.mnuCloseChildClick (Sender: TObject);

begin

if fmMain. ActiveMDichild <> nil then fmMain. ActiveMDichild. Close;

end;

перед закрытием формы выполняется проверка на ее существование.

Свойства MDichildren, MDichildCount и ActiveMDichild доступны для чтения и действуют во время выполнения программы.

Закрытие главного окна многодокументного приложения, как и в однодокументном приложении, приводит к завершению работы всего приложения. За­крытие дочернего окна имеет особенность, связанную с тем, что при попытке его закрыть по умолчанию происходит минимизация окна. Чтобы окно за­крывалось привычным для пользователя способом, следует создать обработчик события OnClose дочерней формы:

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

begin

Action:=caFree;

end;

По умолчанию параметр-признак Action для дочерних окон имеет значение caMinimize и вместо закрытия дочерняя форма минимизируется.

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

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

При упорядочивании окон мозаикой вариант их размещения определяется свой­ством TileMode типа TTileMode, принимающим следующие значения:

  • tbHorizontal — дочернее окно располагается во всю ширину клиентской области родительской формы (по умолчанию);

  • tbVertical — дочернее окно располагается во всю высоту клиентской области родительской формы.

Для программного перемещения между окнами можно использовать методы Previous и Next, которые передают фокус и делают активным предыдущее и следующее дочернее окно, соответственно. Пользователь может переключаться между окнами с помощью мыши или комбинаций клавиш <Ctrl>+<Tab> и <Ctrl>+ +<Shift>+<Tab>.

Главная форма содержит Arrangeicons, предназначенный для упорядочивания пиктограмм свернутых окон. На несвернутые (неминимизированные) окна метод Arrangeicons не оказывает влияния.

Многие многодокументные приложения в главном меню имеют подменю Окно, в котором обычно размещаются команды, предназначенные для манипулирова­ния дочерними окнами. Содержание этого подменю может быть следующим:

  • каскад;

  • мозаика;

  • следующее окно;

  • предыдущее окно.

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

Кроме того, в пункте Окно главного меню часто содержится список раскрытых дочерних окон, в котором активное окно отмечается галочкой. Для автоматического отображения такого списка используется свойство windowMenu типа TMenuitem. В качестве пункта меню можно указывать только пункт верхнего уровня, т. е. пункт, название которого отображается непосредственно в строке меню.

Большинство событий формы многодокументного приложения генерируется и используется обычным способом. Исключением является событие OnActivate, генерируемое двумя способами. Когда приложение активно, при переключении между его дочерними окнами событие onActivate возникает при получении фокуса управления окном. Если приложение было неактивно, то в момент его активизации событие OnActivate возникает для главной формы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]