Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi SplashScreen - Formular bleibt in der Taskleiste (https://www.delphipraxis.net/136549-splashscreen-formular-bleibt-der-taskleiste.html)

TheMiller 2. Jul 2009 16:13


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:
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.
Wie man sehen kann, gebe ich sogar das Formular ganz unten frei.

Das Splash-Screen an sich funktioniert perfekt.

Vielen Dank im Voraus

Bernhard Geyer 2. Jul 2009 16:17

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.

TheMiller 2. Jul 2009 16:19

Re: SplashScreen - Formular bleibt in der Taskleiste
 
Ich habe das FreeAndNil(frmSplash) durch frmSplash.Release getauscht und erhalte AVs... Das Programm startet so nicht.

Bernhard Geyer 2. Jul 2009 16:20

Re: SplashScreen - Formular bleibt in der Taskleiste
 
gib mal beim erstellen des Formulares keinen Owner mit an .Create(nil)

TheMiller 2. Jul 2009 16:21

Re: SplashScreen - Formular bleibt in der Taskleiste
 
Keine Änderung. Sorry

Satty67 2. Jul 2009 16:25

Re: SplashScreen - Formular bleibt in der Taskleiste
 
Delphi-Quellcode:
  while (frmSplash <> nil) do
    Application.ProcessMessages;
  FreeAndNil(frmSplash);

  Application.Run;
end.
Kann das richtig sein? ProcessMessages aufrufen, solange frmSplash nicht NIL ist?

Zudem würde ich nicht FreeAndNil aufrufen, sondern frmSplash.Close. Im frmSplash.OnCloseQuery einfach caAction := caFree setzen.

TheMiller 2. Jul 2009 16:34

Re: SplashScreen - Formular bleibt in der Taskleiste
 
Das habe ich ja getan.

Delphi-Quellcode:
procedure TfrmSplash.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  frmSplash := nil;
end;
Wie im Tutorial. Hatte mit ihm auch sonst nie Probleme. Ist ja nicht das erste Mal, dass ich das verwende ;)

Satty67 2. Jul 2009 16:41

Re: SplashScreen - Formular bleibt in der Taskleiste
 
Delphi-Quellcode:
procedure TfrmSplash.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  frmSplash := nil;
end;
Wieso setzt Du mitten in der Ereignisbehandlung frmSplash auf NIL. Lass das doch das Objekt selber machen (also frmSplash := nil entfernen)

Also ich kenne das Tutorial jetzt nicht, aber kommt mir seltsam vor, wie das öffnen/schleßen eines Splash-Screen da geregelt ist :stupid:

Bernhard Geyer 2. Jul 2009 16:44

Re: SplashScreen - Formular bleibt in der Taskleiste
 
Zitat:

Zitat von DJ-SPM
Das habe ich ja getan.

Delphi-Quellcode:
procedure TfrmSplash.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  frmSplash := nil;
end;
Wie im Tutorial. Hatte mit ihm auch sonst nie Probleme. Ist ja nicht das erste Mal, dass ich das verwende ;)

Kann es sein das dadurch das Formular u.U zwei mal frei gegeben wird :gruebel: In der DPR und im FormClose?

Satty67 2. Jul 2009 17:00

Re: SplashScreen - Formular bleibt in der Taskleiste
 
Zitat:

Zitat von Bernhard Geyer
Kann es sein das dadurch das Formular u.U zwei mal frei gegeben wird :gruebel: In der DPR und im FormClose?

Na frmSplash.Close wird ja überhaupt nicht aufgerufen... es wird einfach vir FreeAndNil das Objekt destroyed.

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;

Sereby 3. Jul 2009 07:22

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);

wolkenschieber 3. Jul 2009 10:01

Re: SplashScreen - Formular bleibt in der Taskleiste
 
Die Zeile

Delphi-Quellcode:
Application.MainFormOnTaskbar := True;
muss vor dem Erzeugen der Splash-Form aufgerufen werden.
Hatte das gleiche Problem auch mal.

TheMiller 3. Jul 2009 10:05

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