Ich hab hier ein Projekt das sich wirkich sehr sehr seltsam verhält.
Hier mal ein Dummyprojekt (auch im Anhang):
Delphi-Quellcode:
dpr:
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
frmSplash := TfrmSplash.Create(
nil);
frmSplash.Show;
frmSplash.Refresh;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
MainForm:
procedure TForm1.FormShow(Sender: TObject);
begin
ShowMessage('
Test!');
end;
Splash-Form:
procedure TfrmSplash.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action:=caFree;
end;
procedure TfrmSplash.Timer1Timer(Sender: TObject);
begin
Close;
end;
Wenn man die Anwendung startet ist erstmal nur das ShowMessage-Fenster aus dem MainForm.OnShow zu sehen.
Wenn sich nun das Splash-Formular selbst freigibt, dann wird auch der Message-Dialog inklusive Taskbar-Eintrag unsichbar und man hat eine unerreichbare Programmleiche im Taskmanager liegen.
Any ideas woher das kommt?
Ich glaub ich hab einen Workaround gefunden (siehe unten), aber ich würde gern das Problem verstehen.
Hier der Workaround:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
PostMessage(self.handle, WM_AfterShow, 0,0); // Dadurch kommt das ShowMessage erst nachdem das MainForm sichtbar ist
end;
procedure TForm1.WMAfterShow(var Message: TWMChar);
begin
ShowMessage('Test!');
end;