Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MainFormOnTaskbar verursacht bizarres Verhalten (https://www.delphipraxis.net/171827-mainformontaskbar-verursacht-bizarres-verhalten.html)

ralfiii 27. Nov 2012 09:45

MainFormOnTaskbar verursacht bizarres Verhalten
 
Liste der Anhänge anzeigen (Anzahl: 1)
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz