Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TreeView Event zeitweise abschalten?


Holgerwa - Di 08.02.05 22:58
Titel: TreeView Event zeitweise abschalten?
Hallo,

hat jemand eine Ahnung, in welcher Reihenfolge Delphi Events ausführt?
Beispiel: Wenn ich per Code in einer Prozedur eine Aktion ausführe, die einen Event in einer Komponente auslöst, wann wird dann zu diesem Event gesprungen? Es passiert (soweit ich sehen kann) nicht direkt, es werden nach der Event-auslösenden-Aktion noch weitere Befehle in dieser Prozedur ausgeführt, und irgendwann später im Ablauf kommt der Event zur Ausführung.

Aber da muß es doch eine Regel geben, wie z.B. "Ein Event wird immer nach Beendigung der Prozedur aufgerufen, in der er verursacht wurde"... oder sowas?

Oder passiert das Ganze mehr oder weniger zufällig von Windows gesteuert?

Danke für jede Hilfe!

Holger


Sprint - Di 08.02.05 23:07
Titel: Re: TreeView Event zeitweise abschalten?
Holgerwa hat folgendes geschrieben:
Oder passiert das Ganze mehr oder weniger zufällig von Windows gesteuert?

Windows sendet Nachrichten und diese müssen abgearbeitet werden. Wenn dein Programm aber gerade beschäftigt sind, werden diese Nachrichten in einer Nachrichtenschleife festgehalten. Und erst dann abgearbeitet, wenn dein Programm gerade nichts macht. Darum gibt es auch Application.ProcessMessage, damit diese Nachrichtschleife auch manuell abgearbeitet werden kann.

Wo liegt denn genau dein Problem?


Holgerwa - Di 08.02.05 23:14

Hallo Sprint, und danke für die schnelle Antwort!

ich habe kein Problem damit, versuche nur zu verstehen, wie der Ablauf funktioniert (ein bischen Licht ins Dunkel bringen :wink:)

Das heißt dann also:
- Code löst Event aus.
- Die Prozedur, die diesen Code ausgeführt hat, wird bis zum Ende ausgeführt.
- Sollte dann nichts Dringenderes anstehen, wird der Event ausgeführt.

Ist das so richtig?

Holger


retnyg - Di 08.02.05 23:18

um licht ins dunkel zu bringen wirst du nicht umhin kommen, die vcl-units zu debuggen. da siehst du dann genau was in welcher reihenfolge passiert. das geht mit projekteinstellungen - compiler - laufzeit dcu's erzeugen (danke @sprint)


Sprint - Di 08.02.05 23:31

Holgerwa hat folgendes geschrieben:
Code löst Event aus

Das kann man nicht so pauschal sagen. Code macht irgendetwas. Windows sendet z.B. Nachricht das sich was verändert hat. VCL verarbeitet und prüft ob diese Nachricht gebraucht wird und löst nur dann ein Ereignis aus, wenn du es auch behandeln willst.

Nimm' z.B. mal einen Button. Wenn du das OnClick Ereignis nicht gesetzt hast, wird auch nichts ausgeführt. Windows sendet aber trotzdem die Nachricht, das der Button gedrückt worden ist.