![]() |
Delphi-Version: 10 Seattle
FormActivate wird mehrfach ausgeführt
Hallo,
ich habe in der Annahme, dass FormActivate nur einmal bei der Aktivierung des Formulars ausgeführt wird, in einem Formular einige Einstellungen in FormActivate vorgenommen. Durch folgenden Code wird FormActivate wieder ausgeführt, obwohl das Formular bereits aktiv ist. Die IB_Richedit befindet sich in diesem Formular. Das ist doch nicht richtig, oder? In diesem Fall verhinderten die Anweisungen in FormActivate die Änderung der Schrift. Ich habe jetzt eine Variable activ:boolean eingebaut, die nach dem ersten Durchlauf true gesetzt wird. Damit funktioniert mein Gebilde. Es wäre aber doch interessant zu wissen, warum das so ist.
Delphi-Quellcode:
procedure TFMain.Schrift1Click(Sender: TObject);
begin if PopupMenueFonts1.PopupComponent is TIB_Richedit then with TIB_Richedit(PopupMenueFonts1.PopupComponent) do begin FontDialog1.Font.Assign(SelAttributes); if FontDialog1.Execute then begin DataSource.Dataset.Edit; SelAttributes.Assign(FontDialog1.Font); end; end; end; |
AW: FormActivate wird
So wie ich das weiß (ich bin vollkommener Laie) kann ein Activate mehrmals passieren, man startet ein weiteres Programm, dann ist das eigene nicht mehr aktiv. Dann holst du dein Programm wieder in den Vordergrund (wieder aktiv) und so weiter und so fort.
Nur einmal wird nach meinem Wissen das FormCreate ausgeführt. Hans |
AW: FormActivate wird mehrfach ausgeführt
Form.OnActivate wird immer aufgerufen, wenn das Fenster, "innerhalb" deines Programms, des Eingabefokus bekommt.
(leider nicht, wenn er von einem fremden Programm zurück kommt -> hierfür siehe TApplicationEvents.OnActivate) Und nun rate mal, was passiert, wenn dein Dialog auf- und wieder zu geht ... der Fokus geht weg und kommt zurück. :zwinker: Tipp: OnCreate oder notfalls OnShow. @H.Bothur: Fast, aber leider ist es nicht ganz so, wie man es sich denkt / erhofft. Dieses Event gilt leider "nur" innerhalb der VCL, dieses Programms, aber per se hast'e es schon richtig vermutet. PS: Die Version zu setzen war gut, aber niemals beim Ersten Post auf "Zurück", weil dann erstellst'e den Post/Thread neu. -> besser den Bearbeiten-Knopf und darin erstmal auf "Erweitert" klicken. Und vielleicht würde sich auch ein [DELPHI]...[/DELPHI] um deinen Code ganz gut machen. :wink: Bonus-Tipp: Vergiss besser sofort wieder, dass es es WITH gibt. |
AW: FormActivate wird mehrfach ausgeführt
OK, danke für die Info.
Muß mir mal überlegen, ob ich das anders schreiben kann. K.-D. |
AW: FormActivate wird mehrfach ausgeführt
Du könntest im FormActivate auch OnActivate auf nil setzen. Dann wird es nur einmal ausgeführt und weitere Variablen sind überflüssig.
|
AW: FormActivate wird mehrfach ausgeführt
Zitat:
|
AW: FormActivate wird mehrfach ausgeführt
Hallo,
ich mache das auch so (OnActivate := nil). Das steht bei jedem Formular in der ersten Zeile. Und das wissen alle. Es führt eher zu Irritationen, wenn FormActivate mehrfach aufgerufen wird. |
AW: FormActivate wird mehrfach ausgeführt
Zitat:
|
AW: FormActivate wird mehrfach ausgeführt
Zitat:
Ich würde sogar so weit gehen zu behaupten, dass eine Funktionalität, die nur beim ersten Activate ausgeführt werden soll, vielleicht gar nicht im richtigen Event platziert ist. Falls doch, wäre der bereits erwähnte Ansatz mit einem Flag wesentlich aussagekräftiger und auch flexibler. |
AW: FormActivate wird mehrfach ausgeführt
"so weit" finde ich das gar nicht. :wink:
In einem Projekt überschreibe ich häufig die Methode "Loaded" wenn es passieren soll wenn die Controls alle fertig geladen sind. Für Instanziierungen oft AfterConstruction. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 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