2009-08-06 9 views
3

Wenn ich ein neues Delphi-Formular erstellen, sein OnResize-Ereignis haken und die App ausführen, wird OnResize ausgelöst, bevor das Fenster angezeigt wird. Was ich nicht weiß ist, ob das immer passieren wird, für jedes Fenster.Wird ein Delphi-Formular immer OnResize auslösen, wenn es angezeigt wird?

(Für jeden, der mit der Windows-API vertraut ist, habe ich ihn auf den ShowWindow-Aufruf in TCustomForm.ShowingChanged (Forms.pas Zeile 5503 in Delphi 2007) zurückverfolgt, der anscheinend eine WM_SIZE ... zumindest für eine Neues Fenster ohne weitere Eigenschaften Ich habe nicht dokumentiert, dass ShowWindow immer WM_SIZE auslöst, daher weiß ich nicht, ob ich darauf zählen kann oder nicht.)

So: Kann ich mich auf ein TForm verlassen immer feuern OnResize, wenn es zuerst angezeigt wird? Oder gibt es Umstände (vielleicht, wenn das Fenster nicht veränderbar ist, vielleicht, wenn die Position-Eigenschaft bestimmte Werte hat, etc.), wo OnResize möglicherweise nicht Feuer bevor das Fenster zuerst angezeigt wird?

Antwort

6

Nein, dieses Ereignis wird nicht immer ausgelöst, wenn das Formular zeigt, abhängig von Dingen wie BorderStyle. Beispielsweise wird es beim Start für bsSingle ausgelöst, nicht jedoch für bsDialog.

Es ist einfach zu testen. Fügen Sie dem OnResize-Ereignis des Hauptformulars einen Protokollierungscode hinzu, ändern Sie den BorderStyle und führen Sie Ihre App aus.

+0

Ich dachte, ich müsste jede mögliche Kombination von Eigenschaften testen - ich habe ehrlich gesagt nicht erwartet, dass es so einfach ist, einen Nicht-OnResize-Fall zu finden. Aber gut, die Antwort zu wissen. Vielen Dank! –

Verwandte Themen