Ответ 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;
Если вы так или иначе беспокоитесь о том, что сообщение появилось в вашем приложении, вы всегда можете добавить приватную логическую переменную, чтобы указать, что она была обработана один раз.