Hallo,
ich beschäftige mich gerade mit den Innereien von Objekt- und Klassenbibliotheken. Dabei ergibt sich für mich die Frage, wie ein Ereignis zum Objekt kommt und von diesem dann weiter verteilt wird.
Einerseits sieht es für den Anewnder so aus, das die aktuell fokussierte Eingabzeile die Tastatureingaben entgegen nimmt, der mit der Maus angklichte Button löst ein Klick Ereignis aus. Aber irgendwer hat ja die Objekte/Klassen geschrieben.
Hier aber kommt ein Tastaturereignis zunächst aus einem Tastaturinterrupt, eine Prozedur oder Funktion liest die Eingabe und gibt sie an mein Programm weiter. Ebenso verhält es sich mit den Mausereignissen. Mir ist auch klar, das im Hauptproggramm eine Schleife REPEAT UNTIL ö.ä. existieren muss, mit eingelagertem Case ... Aber wie kommen die Ereignisse nun zu den Objekten.
Alle visuellen Komponenten sind in Delphi von TComponent abgeleitet. Da drin gibt es eine Eigenschaft Components[Index].
Ich könnte also schreiben:
Delphi-Quellcode:
begin
MyApp := TMyApp.Create;
repeat
for i := 0 to MyForm.Components[i] do
begin
MyForm.KeyPress(KeyCode);
MyForm.MouseMove(...);
MyForm.MouseUp(...);
MyForm.MouseDown(...);
until KeyCode = KEY_ESC;
end.
Ich habe spaßeshalber eine kleine Klassenbibliothek geschrieben, aber dort funktioniert das nicht auf diese Weise. Warum nicht. Was ist in der
VCL da anders. In meinem Konzept ist die Laufzeit zu groß. Warum?
Mir ist klar, das in den Objekten, hier MyForm, weitere komplexe Objekte stecken können, weshalb dann weitere interne Abfragen folgen müssen. Wenn zB. ein Menü auf MyForm ist oder eine Tabelle.... Mit was für Algos.
Mit welchen Algorhithmen werden in der Praxis die Ereignisse auf die Objekte verteilt.
Ich weiß auch, das in jedes Objekt eine Eigenschaft Focused gehört. Wenn die True ist, dann werden dei Eingaben von diesem Objekt entgegengenommen. Sollte per ContainsMouse() gehen. Wenn Mauszeiger auf Objekt, dann nach Klick Focused auf TRUE setzen.
Das ändert aber nix an der Tatsache, das ich jedesmal alle Objekte abfragen muss, ob Mauszeiger drauf. Oder ob lt. Tabordnung das Objekt ausgewählt ist.
Wie funktioniert die Abfrage bei der Tabordnung. Eine Liste aller nacheinander auswählbaren Objekte muss doch auch sukzessive abgefragt werden. Aber das soll auch noch schnell gehen.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.