Идёт загрузка страницы...

htp://aptem.net.ru





/|\АРТЕМ.NET.RU /|\ - Портал для программистов и не только: Delphi Visual Basic BORLAND С++ PERL PHP HTML

Просто одно дочернее MDI-окно?

Решение 1

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

Если вы не просто хотите иметь единственное MDI-окно, а запретить появление дубликатов конкретного типа форм (например: только одно окно со счетами, только одно окно с фактурой, только одно окно со статистикой продаж и т.д.), вам необходимо в цикле убедиться, что такое окно уже существует (или наоборот). В этом случае можно воспользоваться каким-либо идентификатором, например именем дочерней формы в пределах родительского окна. Код для примера:


   
ChildIndex := 0
while (ChildIndex < frmMDIParent.ChildCount) and
(frmMDIParent.MDIChildren[ChildIndex].Name <> frmNewChild.Name) do
Inc(ChildIndex);
if ChildIndex = frmMDIParent.ChildCount then
{здесь создаем новое дочернее окно}
begin
Создаем...
если никакого исключения не произошло, показываем форму...
end
else
{дочерняя форма уже существует, поэтому просто помещаем ее поверх остальных}
frmMDIParent.MDIChildren[ChildIndex].BringToFront;

Решение 2

Создаем форму:


    if Form1 <> nil then
begin

Form1 := TForm1.Create(Application);
Form1.Show;
end;

Обработчик события OnClose формы:


    Action := caFree;
Form1 := nil;

[000164]