Решение 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]