Подтвердить что ты не робот

Правильный способ обеспечения того, чтобы mainform максимизировалась и полностью перерисовывалась, прежде чем показывать модальную форму при загрузке приложения

Каков рекомендуемый способ обеспечения максимальной максимизации основной формы, а все элементы управления перерисовываются до того, как будет отображаться модальная форма при первой загрузке приложения?

Мне нужно показать модальное диалоговое окно при запуске приложения (не экран входа в систему), но если я установил форму на wsMaximized, пока экран максимизируется, элементы управления не имеют возможности перерисовать, и вы останетесь с уродливым беспорядок.

Показываю модальный экран в настоящее время, используя следующее:

procedure TForm1.FormActivate(Sender: TObject);
var
  frmOrderLookup:TfrmOrderLookup;
begin
  onactivate := nil;
  frmOrderLookup:=TfrmOrderLookup.Create(nil);
  try
    frmOrderLookup.showmodal;
  finally
    frmOrderLookup.Free;
  end;
end;
4b9b3361

Ответ 1

То, что я обычно делаю, это отправить пользовательское сообщение обратно в мою форму. Таким образом, он не будет обработан до тех пор, пока другие сообщения для формы не будут обработаны. К моменту, когда это сообщение будет обработано, ваша форма должна была уже закончить перерисовку.

type
  TMyForm = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure HandleLookupMessage(var Message: TMessage); message WM_USER + 1;
  end;

procedure TMyForm.HandleLookupMessage(var Message: TMessage);
var
  frmOrderLookup: TfrmOrderLookup;
begin
  frmOrderLookup := TfrmOrderLookup.Create(Application);
  try
    frmOrderLookup.ShowModal;
  finally
    frmOrderLookup.Release;
  end;
end;

procedure TMyForm.FormCreate(Sender: TObject);
begin
  // Maximise form here if needed
  PostMessage(Handle, WM_USER + 1, 0, 0);
end;

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