AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi SplashScreen - Formular bleibt in der Taskleiste
Thema durchsuchen
Ansicht
Themen-Optionen

SplashScreen - Formular bleibt in der Taskleiste

Ein Thema von TheMiller · begonnen am 2. Jul 2009 · letzter Beitrag vom 3. Jul 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

SplashScreen - Formular bleibt in der Taskleiste

  Alt 2. Jul 2009, 17:13
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SplashScreen - Formular bleibt in der Taskleiste

  Alt 2. Jul 2009, 17:17
Nicht modal angezeigte Formulare (.Show statt ShowModal) sollten per .Release freigegeben werden (Siehe auch Online-Hilfe).
Probiers mal damit.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: SplashScreen - Formular bleibt in der Taskleiste

  Alt 2. Jul 2009, 17:19
Ich habe das FreeAndNil(frmSplash) durch frmSplash.Release getauscht und erhalte AVs... Das Programm startet so nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: SplashScreen - Formular bleibt in der Taskleiste

  Alt 2. Jul 2009, 17:20
gib mal beim erstellen des Formulares keinen Owner mit an .Create(nil)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#5

Re: SplashScreen - Formular bleibt in der Taskleiste

  Alt 2. Jul 2009, 17:21
Keine Änderung. Sorry
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: SplashScreen - Formular bleibt in der Taskleiste

  Alt 2. Jul 2009, 17:25
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.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#7

Re: SplashScreen - Formular bleibt in der Taskleiste

  Alt 2. Jul 2009, 17:34
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
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#8

Re: SplashScreen - Formular bleibt in der Taskleiste

  Alt 2. Jul 2009, 17:41
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: SplashScreen - Formular bleibt in der Taskleiste

  Alt 2. Jul 2009, 17:44
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 In der DPR und im FormClose?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

Re: SplashScreen - Formular bleibt in der Taskleiste

  Alt 2. Jul 2009, 18:00
Zitat von Bernhard Geyer:
Kann es sein das dadurch das Formular u.U zwei mal frei gegeben wird 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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 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