AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Programm hält beim Start einfach an
Thema durchsuchen
Ansicht
Themen-Optionen

Programm hält beim Start einfach an

Ein Thema von BAMatze · begonnen am 15. Jul 2009 · letzter Beitrag vom 17. Jul 2009
 
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#11

Re: Programm hält beim Start einfach an

  Alt 15. Jul 2009, 15:30
Zitat von BAMatze:
Hallo habe das jetzt mit Debugger und Protokoll getestet und er bleibt immer in der FromClose-Prozedure des Splash hängen. Allerdings wird dort, wie man anhand des Quellcodes sieht nicht viel gemacht.

Delphi-Quellcode:
procedure TLoaderForm.FormClose(Sender: TObject; var Action: TCloseAction);
var i: Integer;
    
begin
  // Wenn Form geschlossen wird, ausblenden und "Self.Free" machen
  for i := 230 downto 0 do
  begin
    LoaderForm.AlphaBlendValue := i;
    Application.ProcessMessages;
  end;
  Action := caFree;
end;
Und wie gesagt, in dem Meisten Fällen läuft das ganze ja durch.
Ich denke auch, das Application.ProcessMessages ist das Problem. Dabei werden alle anstehenden Messages abgearbeitet bis die Message-Queue leer ist. Da dein Timer im ControlerBoard aber alle 30ms auslöst, kann es sein, daß deine "Ausblenden"-Aktion ziemlich lange dauern wird.

Vorschlag: Nimm im Hauptform einen neuen Timer, der das Splashscreen ausblendet und am Ende freigibt. Statt LoaderForm.Close/Free enablest du nur den Timer. Etwa so:

Delphi-Quellcode:
  
  // Splashscreen schließen
  LoaderFormCloseTimer.Interval := 100; // 100 ms;
  LoaderFormCloseTimer.Tag := 50; // 50 * 100ms = 5 Sekunden
  LoaderFormCloseTimer.Enabled := true;
  BedienForm.Enabled := true;
Und im Timer-Event:

Delphi-Quellcode:
procedure TBedienForm.LoaderFormCloseTimerTimer(Sender: TObject);
begin
  LoaderFormCloseTimer.Tag := LoaderFormCloseTimer.Tag - 1;
  if LoaderFormCloseTimer.Tag > 0 then begin
    LoaderForm.AlphaBlendValue := Round(230*LoaderFormCloseTimer.Tag/50);
  end
  else begin
    LoaderForm.Close;
    LoaderForm.Free;
  end;

end;
Die Schleife im TLoaderForm.FormClose kann dann weg.
Uwe Raabe
  Mit Zitat antworten Zitat
 


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 03:57 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