![]() |
SplashScreen - Formular bleibt in der Taskleiste
Hallo,
nach dem Splash-Screen-Tutorial von Shary habe ich auch in meinem neusten Programm einen Splash-Screen eingebaut. Nun habe ich das Problem, dass die Splash-Screen-Form 1. in der Taskleiste angezeigt wird und 2. nach dem Freigeben die Schaltfläche für das Forumlar immernoch in der Taskleiste stehen bleibt. Erst mit dem Schließen des Programms verschwindet auch das Splash-Screen aus der Taskleiste. Im Projekt-Quelltext habe ich folgendes stehen
Delphi-Quellcode:
Wie man sehen kann, gebe ich sogar das Formular ganz unten frei.
begin
FrmSplash:=TFrmSplash.Create(Application); try FrmSplash.Show; frmSplash.Refresh; Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm4, Form4); Application.CreateForm(TForm5, Form5); finally frmSplash.InitializationDone := True; end; while (frmSplash <> nil) do Application.ProcessMessages; FreeAndNil(frmSplash); Application.Run; end. Das Splash-Screen an sich funktioniert perfekt. Vielen Dank im Voraus |
Re: SplashScreen - Formular bleibt in der Taskleiste
Nicht modal angezeigte Formulare (.Show statt ShowModal) sollten per .Release freigegeben werden (Siehe auch Online-Hilfe).
Probiers mal damit. |
Re: SplashScreen - Formular bleibt in der Taskleiste
Ich habe das FreeAndNil(frmSplash) durch frmSplash.Release getauscht und erhalte AVs... Das Programm startet so nicht.
|
Re: SplashScreen - Formular bleibt in der Taskleiste
gib mal beim erstellen des Formulares keinen Owner mit an .Create(nil)
|
Re: SplashScreen - Formular bleibt in der Taskleiste
Keine Änderung. Sorry
|
Re: SplashScreen - Formular bleibt in der Taskleiste
Delphi-Quellcode:
Kann das richtig sein? ProcessMessages aufrufen, solange frmSplash nicht NIL ist?
while (frmSplash <> nil) do
Application.ProcessMessages; FreeAndNil(frmSplash); Application.Run; end. Zudem würde ich nicht FreeAndNil aufrufen, sondern frmSplash.Close. Im frmSplash.OnCloseQuery einfach caAction := caFree setzen. |
Re: SplashScreen - Formular bleibt in der Taskleiste
Das habe ich ja getan.
Delphi-Quellcode:
Wie im Tutorial. Hatte mit ihm auch sonst nie Probleme. Ist ja nicht das erste Mal, dass ich das verwende ;)
procedure TfrmSplash.FormClose(Sender: TObject; var Action: TCloseAction);
begin Action := caFree; frmSplash := nil; end; |
Re: SplashScreen - Formular bleibt in der Taskleiste
Delphi-Quellcode:
Wieso setzt Du mitten in der Ereignisbehandlung frmSplash auf NIL. Lass das doch das Objekt selber machen (also frmSplash := nil entfernen)
procedure TfrmSplash.FormClose(Sender: TObject; var Action: TCloseAction);
begin Action := caFree; frmSplash := nil; end; Also ich kenne das Tutorial jetzt nicht, aber kommt mir seltsam vor, wie das öffnen/schleßen eines Splash-Screen da geregelt ist :stupid: |
Re: SplashScreen - Formular bleibt in der Taskleiste
Zitat:
|
Re: SplashScreen - Formular bleibt in der Taskleiste
Zitat:
Statt FreeAndNil würde ich Close aufrufen und im Close das frmSplash := nil entfernen. Was die Schleife davor soll, die Application.Messages aufruft, verstehe ich auch nicht so ganz. Für mich ist das eine Endlosschleife, solange frmSplash nicht noch an dritter Stelle beendet wird. Ich würde es so schreiben:
Delphi-Quellcode:
begin
{ while (frmSplash <> nil) do Application.ProcessMessages; FreeAndNil(frmSplash); } frmSplash.Close; Application.Run; end. procedure TfrmSplash.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; //frmSplash := nil; end; |
Re: SplashScreen - Formular bleibt in der Taskleiste
Schreib diese zeilen in das Form.Create deines SplashScreens und es wird funktionieren ;)
Delphi-Quellcode:
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW); ShowWindow(Application.Handle, SW_SHOW); |
Re: SplashScreen - Formular bleibt in der Taskleiste
Die Zeile
Delphi-Quellcode:
muss vor dem Erzeugen der Splash-Form aufgerufen werden.
Application.MainFormOnTaskbar := True;
Hatte das gleiche Problem auch mal. |
Re: SplashScreen - Formular bleibt in der Taskleiste
Perfekt - das hat's tatsächlich gelöst. Ich werde Shary mal anschreiben, dass er das mit in sein Tutorial einbaut ;)
Vielen Dank an alle! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz