AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

10.3.1: OnActivate wird vor OnCreate ausgeführt

Ein Thema von Bbommel · begonnen am 21. Mär 2019 · letzter Beitrag vom 26. Mär 2019
Antwort Antwort
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
666 Beiträge
 
Delphi 12 Athens
 
#1

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 21. Mär 2019, 17:32
Wie gesagt, ob das schön ist oder nicht, soll jetzt nicht unbedingt das Thema sein. Aus meiner Sicht sollte ich mich aber darauf verlassen können, da die Reihenfolge der Ereignisse auch explizit in der Doku erwähnt wird.

Der Vorschlag, das OnActicate erst am Ende von OnCreate zu setzen, hilft leider auch nicht (was ich zugegebenermaßen schon befürchtet habe). In dem Fall wird as OnActivate einfach gar nicht mehr ausgeführt (weil das Ereignis ja schon durch ist).

Wichtiger Hinweis noch: wie ich gerade gemerkt habe, tritt der Effekt nur in meiner Test-VM auf (Win 8.1, VMware Workstation Player 12). Aber: das mit 10.2.3 kompilierte Programm tut auch in der VM problemlos, das mit 10.3.1 nicht. Beide getestet auch außerhalb von Delphi.

Kopiere ich das mit 10.3.1 erzeugte Programm aus der VM auf meinen normalen PC, dann läuft es.

Vielleicht grenzt das ja das Problem für jemanden etwas ein.

Ich bin jetzt erstmal weg, mir raucht etwas der Kopf und ich brauche frische Luft...
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
666 Beiträge
 
Delphi 12 Athens
 
#2

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 21. Mär 2019, 17:39
Kleiner Nachtrag: wie ich zur Not einen Workaround basteln könnte mit einer Statusvariablen, die bemerkt, dass das OnActivate vor dem OnCreate ausgeführt wurde, ist eigentlich auch klar. Mir geht es aber wirklich darum, irgendwie die Ursache herauszufinden, denn das finde ich schon ein bisschen merkwürdig, dass das passiert. Wenn sich dabei herausstellt: ja, ist halt so und ist auch erlaubt so und bisher hatte ich einfach nur "Glück", dann wird korrigiere ich natürlich mein Programm. Aber irgendwie habe ich bisher noch immer den Eindruck, dass das eigentlich so nicht passieren darf.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 21. Mär 2019, 17:44
Hallo,
10.3 Community klappt wie erwartet, FormCreate vor FormActivate.

Ich würde es mal mit einem neuen leeren Projekt testen.
Heiko
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#4

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 21. Mär 2019, 17:53
Anderer Vorschlag:

Zuweisung des OnActivate aus dem Objektinspektor raus.

Im OnCreate ans Ende zuerst den Aufruf der OnActivate-Methode und dann das Ereignis zuweisen.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender : TObject);
begin
  ...
  FormActivate(Sender);
  Self.OnActive := FormActivate;
end;
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
666 Beiträge
 
Delphi 12 Athens
 
#5

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 21. Mär 2019, 17:57
@hoika: Danke für die Rückmeldung. In einem leeren Projekt klappt es bei mir auch problemlos - hatte ich im Ursprungspost auch schon geschrieben.

@Delphi.Narium: Ja, das wäre wohl der einfachste Workaround.

Aber ich würde immer noch gerne die Ursache verstehen und ob es wirklich ein Fehler von mir ist oder ein Bug in der VCL.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 21. Mär 2019, 21:32
Hallo,
Zitat:
Aber ich würde immer noch gerne die Ursache verstehen und ob es wirklich ein Fehler von mir ist oder ein Bug in der VCL.
Wo ist das Problem?
Binde deine verwendeten Komponenten immer weiter ein und finde die, die Murks macht.

Zitat:
Wenn ich eine komplett neue und ansonsten leere Delphi-VCL-Anwendung erstelle und den beiden Ereignissen eine Funktion zuweise (in dem Fall ein einfaches ShowMessage), dann ist die Reihenfolge der Ereignisse korrekt - erst Create, dann Activate.
Das hatte ich in dem vielen Text übersehen, sorry.


Diverse Fremdkomponenten erzeugen OnActivate (WM_ACTIVATE) an Stellen,
wo man sie nicht erwartet.
Fang mal bei TMS (TXXXDateTimePicker) an und hangel dich durch DevExpress.

Trail and Error
Heiko

Geändert von hoika (21. Mär 2019 um 21:35 Uhr)
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
666 Beiträge
 
Delphi 12 Athens
 
#7

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 21. Mär 2019, 22:14
Hallo,
Zitat:
Aber ich würde immer noch gerne die Ursache verstehen und ob es wirklich ein Fehler von mir ist oder ein Bug in der VCL.
Wo ist das Problem?
Binde deine verwendeten Komponenten immer weiter ein und finde die, die Murks macht.
Ja, klar, das wäre die Notlösung. Das wird allerdings auch einiges an Bastelei, vielleicht würde ich dann doch einfach aufgeben und es halt doch einfach so hinnehmen.

Ich hatte gehofft, dass es eine Funktion aus den Standard-Units gibt, die benutzt wird, um das WM_ACTIVATE-Event anzulegen. Dann könnte man ja da einen Breakpoint reinsetzen und schauen, von wo aus das aufgerufen wird.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 22. Mär 2019, 00:07
Ich hatte gehofft, dass es eine Funktion aus den Standard-Units gibt, die benutzt wird, um das WM_ACTIVATE-Event anzulegen. Dann könnte man ja da einen Breakpoint reinsetzen und schauen, von wo aus das aufgerufen wird.
Das WM_ACTIVATE wird vom OS gesendet und kommt in der Anwendung in TCustomForm.WMActivate an. Es gibt meines Wissens keine Stelle, in der die VCL selbst ein WM_ACTIVATE absetzt.

Aber das WM_ACTIVATE löst den FormActivate Event gar nicht direkt aus. Dies geschieht in einer CM_ACTIVATE Message und diese wird an verschiedenen Stellen in einem Form ausgelöst: SetFocusedControl, ShowModal oder als Folge einer empfangenen WM_ACTIVATEAPP Message.

Gibt es vielleicht irgendwo einen Aufruf von Applicatition.ProcessMessages?
Welche Einstellung hat das Form-Property OldCreateOrder?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 21. Mär 2019, 21:59
Bist du sicher, daß es wirklich vor dem OnCreate aufgerufen wird oder eventuell auch innerhalb des OnCreate, noch bevor das fertig ist?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
666 Beiträge
 
Delphi 12 Athens
 
#10

AW: 10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 21. Mär 2019, 22:16
Bist du sicher, daß es wirklich vor dem OnCreate aufgerufen wird oder eventuell auch innerhalb des OnCreate, noch bevor das fertig ist?
Ich hatte Breakpoints auf jeweils der ersten Zeile von meinem FormActivate und vom FormCreate. Die erste Zeile vom Activate wurde vor der ersten Zeile vom Create ausgeführt.
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:31 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