![]() |
Ereignis OnAfterShow
Hi.
Eigentlich ein simples Problem. Ein Form bekommt zur Designzeit das Propertie WindowsState = wsMaximized zugewiesen. Ich will die Größe meiner Form nach dem es das erste mal sichtbar wurde wissen. Aber wie kann ich Height und Width des Forms rausfinden. In OnShow bekomme ich die alten Werte (also die Größe zur Designzeit). Wenn man in die Delphi Sourcen schaut, wird auch klar warum. Das Ereignis OnShow wird vor dem Zuweisen von WindowState gesendet. Bisher meine Lösung, im OnResize einen Zähler abfragen:
Delphi-Quellcode:
Leider haben die Delphientwickler ein 'OnAfterShow' vergessen.
procedure TForm1.FormResize(Sender: TObject);
begin if ResizeCounter = 2 then // OnReszie wird beim ersten anzeigen 2-mal ausgelöst begin ... // Tu was, z.B. Controls anordnen end; Inc(ResizeCounter); end; Gibt es da eine schönere Lösung? thx |
Re: Ereignis OnAfterShow
.. eine eigene WM_AfterShow definieren und mit PostMessage() im OnShow senden
|
Re: Ereignis OnAfterShow
und was soll das bringen???
Im OnShow geht doch nicht (siehe mein erster Beitrag) |
Re: Ereignis OnAfterShow
Das Einzige was mir noch einfallen würde wäre ein Timer, den man im onShow startet.
|
Re: Ereignis OnAfterShow
Schlagt mich für die seltsame VAriante, aber ich mache das immer so:
Delphi-Quellcode:
// FirstRun ist eine Bool-Variable im private des Formular
procedure TForm1.FormCreate(Sender: TObject); begin FirstRun := True; end; procedure TForm1.FormActivate(Sender: TObject); begin if FirstRun then begin FirstRun := False; // Fenster Größe setzen WindowState := wsMaximized; Application.ProcessMessages; // einmaliges Initialisieren der Controls Label1.Caption := IntToStr(Width)+'x'+IntToStr(Height); end; end; |
Re: Ereignis OnAfterShow
Zitat:
|
Re: Ereignis OnAfterShow
Zitat:
|
Re: Ereignis OnAfterShow
@taaktaak:
Sorry, du hast vielleicht sogar recht. :gruebel: Die Message reiht sich im Windows Messagehandler 'hinten' an. Somit hat dann das Form wenn diese Message verarbeitet wird seine endgültige Größe. Wichtig ist hier wohl nur, dass das PostMessage() ganz am Ende von OnShow stattfindet und das Form schneller gezeichnet wird als die Message dran ist. @mquadrat: Ein Timer ist unter Umständen genauso problematisch. Dann bleich ich lieber bei meiner 'ResizeCount' Variante. |
Re: Ereignis OnAfterShow
Zitat:
|
Re: Ereignis OnAfterShow
Also, ich mache das in verschiedenen Projekten auf diese Weise,
bisher hat es immer funktioniert. - probiere es mal aus! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 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 by Thomas Breitkreuz