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
 
Bbommel

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

10.3.1: OnActivate wird vor OnCreate ausgeführt

  Alt 21. Mär 2019, 16:08
Hallo Lieblingsforum,

ich habe mir jetzt auch mal Delphi Rio Update 1 angesehen. Beim compilieren meiner Hauptanwendung ist mir dabei ein merkwürdiger und sehr lästiger Effekt aufgefallen: zur Initialisierung meiner Anwendung gibt es einigen Code im OnCreate und einiges im OnActivate des Hauptformulars der Anwendung. Im OnCreate werden einige essentielle Dinge initailisiert (Konfigurations-Objekte erzeugt, Konfiguration gelesen und ähnliches), im OnActivate werden dann, wenn man sich darauf verlassen kann, dass alle Komponenten und ggf. zusätzlichen Formulare erzeugt sind, ein paar visuelle Einstellungen vorgenommen (das passiert natürlich nur beim ersten Aufruf von OnActivate).

Auch wenn es manchem jetzt in den Fingern juckt, eine Bitte: die Frage ist jetzt nicht, ob das ein geschicktes Design ist.

Diese Konstruktion funktioniert nun aber so, seitdem es die Anwendung gibt, also seit mittlerweile mehr als 12 Jahren und sie hat somit auch schon so einige Generationen Delphi gesehen. Nun habe ich mich beim Testen aber eben gewundert, dass die Anwendung nicht richtig initialisiert wurde. Der oberflächliche Grund war schnell gefunden: das Ereignis OnActivate wird vor dem Ereignis OnCreate ausgeführt - damit sind einige Objekte noch gar nicht vorhanden, auf die in OnActivate zugegriffen wird.

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.

Es muss also auf meinem Formular irgendetwas geben, das dafür sorgt, dass das "Activate" zu früh getriggert wird. Ich habe versucht, ein bisschen durch die Delphi-Units (Vcl.Forms, Vcl.ComCtrls) zu debuggen, aber irgendwann steig ich dann doch nicht mehr durch die Magie der VCL durch - auf den obersten Ebenen konnte ich zwischen 10.2.3 und 10.3.1 jedenfalls keine offensichtliche Änderung am Code feststellen. Das muss also irgendwo in den Tiefen der VCL passieren.

Aus meiner Sicht ist das erst mal ein Bug. Denn unabhängig davon, was ich alles an Komponenten auf das Hauptfromular geknallt habe, darf das ja nicht dazu führen, dass ein OnActivate vor einem OnCreate ausgeführt wird - hier ist ja auch die Reihenfolge in der Doku eindeutig beschrieben.

Habt ihr eine Idee, wie ich dem Ganzen weiter auf die Spur kommen kann? Könnte ich irgendwo den Moment abfangen, wenn das Activate in die Event-Queue geschrieben wird (oder was auch immer die da machen - es ist jedenfalls kein trivialer Aufruf eines "DoActivate", sondern im Aufruf-Stack steht vorher ganz viel mit "WndProc)? Wenn es tatsächlich ein Bug ist, würde ich schon gerne eine bessere Idee haben, was ich an Emba melden soll.

Ich würde mich über ein bisschen Hilfe sehr freuen.
  Mit Zitat antworten Zitat
 


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 09:49 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