Delphi - Скрытый ребенок MDI формирует создание

Мое приложение имеет много много форм mdi, и они создаются после успешного пользовательского входа в систему. Как я могу лучше всего скрыть этот процесс создания? Это выглядит глупым, и это занимает время, в то время как формы mdi красятся после того, как новая форма создается и так далее.

До сих пор я использовал LockWindowUpdate, который не скрывает все, но я хотел бы использовать экран-заставку, показывающий прогресс создания, но я не могу с LockWindowUpdate.

Наилучшие пожелания Janne

5
задан HeartTune 21 April 2010 в 12:33
поделиться

1 ответ

Чтобы создать невидимые дочерние формы 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 () для уменьшения мерцания или подавления любого вывода на экран является неправильным, неправильным, неправильным. Не делайте этого , прочтите серию статей Раймонда Чена по этой теме, чтобы понять, почему это так.

9
ответ дан 14 December 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: