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 Form ist während OnActivate noch nicht sichtbar (https://www.delphipraxis.net/80802-form-ist-waehrend-onactivate-noch-nicht-sichtbar.html)

hsbc 15. Nov 2006 14:53


Form ist während OnActivate noch nicht sichtbar
 
Bei einer meiner Anwendungen wird während des Abarbeitens der einzelnen Anweisungen im OnActive-Ereignis die Form nicht angezeigt, auch dann nicht, wenn einige Application.ProcessMessages eingebaut sind. Erst wenn alle Befehle im OnActivate durch sind, wird die Form angezeigt. Bei allen meinen anderen Anwendungen ist dies nicht so.

Was kann da schuld sein, bzw. wie kann ich erreichen, dass im OnActivate die Form bereits aufgebaut wird. Ich brauche das, da ich nach dem Start der Anwendung für 5 sec (mittels Timer) einen Button anschreibe, mit dem Benutzer die Möglichkeit hat, das automatische Weiterarbeiten des Programmes abzubrechen. Der Timer wird im OnActivate gestartet. Obwohl auch im OnTimer-Ereignis ein Application.ProcessMessages eingebaut ist, wird die Form erst nach Ablauf des Timers angezeigt.

Wie kann ich erreichen, dass die Form rechtzeitig angezeigt wird?

mfg
Herbert

hoika 15. Nov 2006 14:56

Re: Form ist während OnActivate noch nicht sichtbar
 
Hallo,

also ich benutze das auch so (in FormActivate App.ProcessMessages aufrufen).
Da machst irgendwas anderes falsch.

Ist dass ProcessMessages noch vor dem Timer ?


Heiko

hsbc 15. Nov 2006 15:10

Re: Form ist während OnActivate noch nicht sichtbar
 
Ich hab schon alles probiert, vor dem Timer, nach dem Timer. Ich hab auch schon statt dem Timer eine selbstgeschriebene Pause-Funktion verwendet, es ist immer das gleiche. Die Form wird erst nach dem vollständigen Ablauf der 5 Sekunden angezeigt.

Hier ist z.B. meine Pause-Funktion und die FormActivate:

Delphi-Quellcode:
function TForm.Pause(Zeit: LONGINT): BOOLEAN;
var StartZeit: LONGINT;
begin
  // Zeit = Anzahl Millisekunden Pause
  Abgebrochen := FALSE;
  Startzeit := GetTickCount;
  repeat
    Application.ProcessMessages;
    IF Abgebrochen THEN Zeit := 0;
  until (GetTickCount - Startzeit > Zeit) or (Zeit = 0);
  Result := NOT Abgebrochen;
end;


procedure TForm.FormActivate(Sender: TObject);
begin
  // ... Initialisierung verschiedener Parameter
  // ...
  if Pause(5000) then // Machweiter;
  ShowMessage('OK');
end;
Das "OK" kommt erst nach dem Ablauf der 5 Sekunden und danach wird erst die Form gezeichnet.


So------- der Fehler ist jetzt behoben. War meine Schuld. Hatte bei der Form borderstyle auf bsDialog eingestellt und das geht das nicht.




mfg
Herbert


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 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