Чтобы сделать дочерние формы MDI невидимыми, вы устанавливаете для их свойства Visible
значение False
, и, кроме того, вы должны отключить принудительное отображение их в VCL во время создания. Это происходит с помощью установщика свойств FormStyle
для TCustomForm
, который устанавливает Visible
в True
для дочерних форм MDI.
Если поставить FormStyle
в инспекторе объектов, то установщик свойств будет вызываться уже при создании формы, и форма будет отображаться не сразу, а только после завершения построения. Это позволяет сбросить запрос для отображения формы, переопределив метод AfterConstruction()
следующим образом:
procedure TMDIChild.AfterConstruction;
begin
Exclude(FFormState, fsVisible);
inherited;
end;
Это создаст невидимую дочернюю форму MDI.
Чтобы проверить это, вы можете создать новое приложение MDI в IDE, переопределить метод в классе дочерней формы, как показано выше, и смоделировать длинную инициализацию:
procedure TMainForm.FileNew1Execute(Sender: TObject);
var
i: integer;
begin
for i := 1 to 10 do begin
CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1));
Update;
Sleep(500);
end;
for i := 0 to MDIChildCount - 1 do
MDIChildren[i].Visible := True;
end;
Без переопределенного метода AfterConstruction()
он будет создавать и показывать дочерний элемент MDI каждые полсекунды. С переопределенным методом он покажет их все после периода занятости в 5 секунд, что даст вам возможность вместо этого отобразить заставку.
Важно:
Использование LockWindowUpdate()
для уменьшения мерцания или подавления любого экрана вывод неправильный, неправильный, неправильный. Не делайте этого, прочитайте серию < href="http://blogs.msdn.com/oldnewthing/archive/2007/02/22/1742084.aspx" rel="noreferrer">статьи Рэймонда Чена на эту тему, чтобы понять, почему это так. .
person
mghie
schedule
21.04.2010