AGB  ·  Datenschutz  ·  Impressum  







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

Verständnisfrage VCL zu Application.CreateForm()

Ein Thema von delphifan2004 · begonnen am 29. Sep 2009 · letzter Beitrag vom 30. Sep 2009
 
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Verständnisfrage VCL zu Application.CreateForm()

  Alt 30. Sep 2009, 20:22
Um die ursprüngliche Frage zu klären: TApplication.CreateForm anstatt vom einfachen Konstruktoraufruf erfüllt zwei Zwecke: Erstens wird, falls gerade das allererste Formular erstellt wird, das Mainform gesetzt. Zweitens wird die Schlamperei von einigen Delphi-Programmierern unterstützt. Letzteres kommt so:
Wenn ich MyForm := TMyForm.Create(Application) aufrufe, wird mit dem Aufruf des Konstruktors auch das OnCreate-Ereignis ausgelöst. Da der Konstruktor aber noch nicht zurückgekehrt ist, hat die Variable MyForm noch keinen neuen Wert erhalten, steht also gewöhnlich auf nil. Einige Programmierer verwenden allerdings statt Self gerne die Formular-Variable, was in OnCreate aus erwähntem Grund zu einem Fehler führt. Um das zu vermeiden, wird in CreateForm das Anfordern des Speichers und der Aufruf des Konstruktors getrennt: So erhält die Variable ihren Wert, bevor der Konstruktor aufgerufen wird und kann in OnCreate gefahrlos verwendet werden.

@DualCoreCpu: Deine Vorstellung von Ereignissen ist falsch. Windows sendet Nachrichten an einen Thread. Der Thread erhält dann zusammen mit der Nachricht auch das Fenster, dem diese Nachricht gesendet werden soll. Die anderen Komponenten "sehen" die Nachricht also nicht. Der Thread kann dann Windows beauftragen, die Nachricht dem Fenster zur Bearbeitung zu überlassen (das MSDN-Stichwort wäre DispatchMessage). Windows muss nicht wissen, welche Nachrichten welchem Formular gehören. Windows arbeitet hier Thread-weise: TApplication.HandleMessage bearbeitet die Nachrichtenqueue des aktuellen Threads.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  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 19:44 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-2025 by Thomas Breitkreuz