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
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Uwe Raabe
Uwe Raabe

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

Re: Programm hält beim Start einfach an

  Alt 15. Jul 2009, 16: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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Programm hält beim Start einfach an

  Alt 15. Jul 2009, 22:18
Man kommt auch ohne Timer und Schleife aus, wenn man die API-Funktion MSDN-Library durchsuchenAnimateWindow benutzt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#13

Re: Programm hält beim Start einfach an

  Alt 16. Jul 2009, 10:00
Zitat von BAMatze:
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;
Mich würde da was ganz großes stören, nämlich die Verwendung von exakten Variablennamen (LoaderForm.). Der andere Punkt ist, dass du hier schreibst, dass das Formular durch den aufruf von Self.Free terminiert wird.

An anderer Stelle schreibst du:
Zitat von BAMatze:
[delphi]
// Splashscreen schließen
LoaderForm.Close;
LoaderForm.Free;
So, jetzt ist das Objekt doch 2x aus dem Speicher entfernt worden, oder? (hab die Delphi-VCL-Quelltexte noch nicht konsultiert) Aber dennoch müsste hier ein Fehler vorliegen.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Programm hält beim Start einfach an

  Alt 16. Jul 2009, 17:34
Hallo an euch alle und vielen Dank für die ganzen Anregungen. Konnte heute leider noch nicht weiter machen mit dem Problem, ist aber morgen früh gleich 2. Tagespunkt. Musste heute mal um Abschlussarbeit und so kümmern und deswegen leider nur unterwegs.
Aber danke euch für die vielen Verbesserungsvorschläge und die Hilfe. Werde morgen posten, ob das Problem gelöst ist.

Vielen Dank an Euch
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Programm hält beim Start einfach an

  Alt 17. Jul 2009, 13:43
Also habe jetzt mal die Close-Procedure wie ihr mir geraten habt geändert und das Application.ProcessMessages; aus der Schleife genommen. Funktioniert alles super. Hätte eigentlich nur noch die Frage, warum eigentlich, wenn ich diesen Befehl weglasse das Bild in meiner Form nicht sichtbar ist, sondern erst nach der Schleife eingebunden wird.

Vielen Dank
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

Re: Programm hält beim Start einfach an

  Alt 17. Jul 2009, 14:15
Zitat von BAMatze:
Hätte eigentlich nur noch die Frage, warum eigentlich, wenn ich diesen Befehl weglasse das Bild in meiner Form nicht sichtbar ist, sondern erst nach der Schleife eingebunden wird.
Weil die Paint- bzw. Refresh-Message solange noch in der Message-Queue festsitzt?
Uwe Raabe
  Mit Zitat antworten Zitat
GHorn

Registriert seit: 24. Mär 2009
Ort: NRW
124 Beiträge
 
#17

Re: Programm hält beim Start einfach an

  Alt 17. Jul 2009, 14:33
Zitat:
Hätte eigentlich nur noch die Frage, warum eigentlich, wenn ich diesen Befehl weglasse das Bild in meiner Form nicht sichtbar ist, sondern erst nach der Schleife eingebunden wird.
Was meinst Du mit "Bild nicht sichtbar"? Wird das Ausblenden nicht angezeigt?
Oder stehe ich jetzt auf dem Schlauch?
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Programm hält beim Start einfach an

  Alt 17. Jul 2009, 14:45
Zitat von GHorn:
Zitat:
Hätte eigentlich nur noch die Frage, warum eigentlich, wenn ich diesen Befehl weglasse das Bild in meiner Form nicht sichtbar ist, sondern erst nach der Schleife eingebunden wird.
Was meinst Du mit "Bild nicht sichtbar"? Wird das Ausblenden nicht angezeigt?
Oder stehe ich jetzt auf dem Schlauch?
Das aufblenden wird dargestellt mit schwarzem Bildschirm, ist das Fenster da, wird das Bild eingefügt. Problem lässt sich beheben, indem ich den angesprochenen Befehlt bei close nach der Schleife und beim Start vor die Schleife schreibe. Was ich mich gerade nur frage, ist warum dies so ist, dass das Bild ohne den Befehl nicht oder erst später angezeigt wird, als ich eigentlich möchte.
2. Account Sero
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:53 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