Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Verständnisfrage Ereignisfluss in der App (https://www.delphipraxis.net/181776-verstaendnisfrage-ereignisfluss-der-app.html)

schöni 8. Sep 2014 20:34

Verständnisfrage Ereignisfluss in der App
 
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.

Bummi 8. Sep 2014 21:09

AW: Verständnisfrage Ereignisfluss in der App
 
Ich bin nicht sicher ob ich Deine Frage richtig verstanden habe, aber es klingt für mich als ob Du die Unit Forms studieren könntest, vor allem TApplication.WndProc und CustomForm.WndProc,


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 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