MDIChildren и MDIChildCount

Свойство MDIChildren является массивом объектов TForm, предоставляющих доступ к созданным дочерним формам. MDIChildCount возвращает количество элементов в массиве MDIChildren.

Обычно это свойство используется при выполнении какого-либо действия над всеми открытыми дочерними формами. Вот код сворачивания всех дочерних форм командой Minimize All.

procedure TFormI.mnuMinimizeAllClick(Sender: TObject);
var
iCount: Integers;
begin
for iCount:= MDIChildCount-1 downto 0 do
MDIChildren[iCount].WindowState:= wsMinimized;
end;

Если вы будете сворачивать окна в порядке возрастания элементов массива, цикл будет работать некорректно, так как после сворачивания каждого окна массив MDIChildren обновляется и пересортировывается, и вы можете пропустить некоторые элементы.

TileMode

Это — свойство перечислимого типа, определяющее, как родительская форма размещает дочерние при вызове метода Tile. Используются значения tbHorizontal (по умолчанию) и tbVertical для размещения форм по горизонтали и вертикали.

WindowMenu

Профессиональные MDI-приложения позволяют активизировать необходимое дочернее окно, выбрав его из списка в меню. Свойство WindowMenu определяет объект TMenuItem, который Delphi будет использовать для вывода списка доступных дочерних форм.

Для вывода списка TMenuItem должно быть меню верхнего уровня. Это меню имеет свойство Caption, равное swindow.

MDI-события TForm

В MDI-приложении событие OnActivate запускается только при переключении между дочерними формами. Если фокус ввода передается из не MDI-формы в MDI-форму, генерируется событие OnActivate родительской формы, хотя ее свойство Active никогда и не устанавливается равным True. Эта странность на самом деле строго логична: ведь, если бы OnActivate генерировался только для дочерних форм, не было бы никакой возможности узнать о переходе фокуса ввода от другого приложения.

MDI-методы TForm

Специфичные для MDI-форм методы перечислены ниже.
Arrangelcons выстраивает пиктограммы минимизированных дочерних форм в нижней части родительской формы.

Cascade располагает дочерние формы каскадом, так что видны все их заголовки. Next и Previous переходит от одной дочерней формы к другой, как будто вы нажали <Ctrl+Tab> или <Ctrl+Shift+Tab>.
Tile выстраивает дочерние формы так, что они не перекрываются.

Работа с меню

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

Если, к примеру, в строке меню дочерней формы TmdiEditFrm находятся два отдельных меню — File, Edit, Character. Строка меню родительской формы TmainForm содержит два элемента —File и Window. При активизации дочернего окна видно меню из четырех элементов — File, Edit, Character и Window. Меню File родительской формы и меню File дочерней формы содержат различные команды. Для того, чтобы получить этот эффект, следует использовать свойство GroupIndex. В нашем случае свойство GroupIndex меню File должно иметь значение 0, а это же свойство меню Edit, Caracter — значения1. Как и в случае дочерней формы, свойство GroupIndex меню File родительской формы имеет значение 0. Однако значение свойства GroupIndex меню Window — 9.

Свойство GroupIndex играет большую роль, так как именно оно управляет процессом слияния меню. Это означает, что, когда главная форма запускает дочернюю форму, меню последней сливается с меню главной формы. Свойство GroupIndex определяет, в каком порядке следуют отдельные меню и какие меню главной формы заменяются меню дочерней формы. Слияние применяется лишь к элементам строки меню компонента TmainMenu, а не к их командам.

Если значение свойства GroupIndex элемента меню дочерней формы совпадает со значением свойства GroupIndex элемента меню главной формы, элемент меню дочерней формы заменяет собой элемент меню главной формы. Оставшиеся меню располагаются в строке в порядке, определенном значениями свойств GroupIndex элементов объединенного меню.

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

Наши рекомендации