Einzelnen Beitrag anzeigen

DualCoreCpu
(Gast)

n/a Beiträge
 
#1

Ereignisverteilung verstehen

  Alt 24. Okt 2009, 10:28
Hallo!

Ich beschäftige mich gerade mit der Verteilung der Ereignisse in einer Anwendung. Irgendwo muss das Ereignis ausgelöst werden. Dann kommt die Verteilung auf die Klassen.

In einem Multitasking Betriebssystem wie Windows wird der jeweiligen Message ein Handle mitgegeben und das Windows API sorgt dafür, das dann nur dasjenige Objekt das Ereignis zu sehen bekommt, für das dieses Ereignis bestimmt ist.

Hätte man aber kein Windows API, wie würde dann womöglich in einem Single Tasking Betriebssystem die Verteilung der Ereignisse aussehen. Ich stelle mir das so vor:

Delphi-Quellcode:
procedure TMyClass.HandleMouse(Sender: TObject; Shift: TShiftstate, X, Y: Integer);
var Index: Integer; Instance: TCustomControl;
begin
  if Index < TCustomControl(Sender).ComponentCount then
  if not TCustomControl(Sender).ContainsMouse(X, Y) then
  begin
   if (TCustomControl(Sender).ComponentCount > 0)
      then inc(Index)
  end
  else
  begin
    //if TCustomControl(Sender).Components[Index].ComponentCount > 0 then
    Instance := TCustomControl(Sender); //Zwischenspeicher, falls Ablauf noch
                                        //nicht richtig.
                                        //Dann kann ich Instance zu
                                        //korrekter Formulierung verw.
    HandleMouse(Sender, Shift, X, Y);
    TCustomControl(Sender).Select;
  end;
end;
Das Mausereignis wird ausgelöst, indem ich z.B. meine linke Maustaste drücke. Nun muss ermittelt werden, welches Objekt voher von mir ausgewählt wurde z.B. welche der angenemmenen 3 Eingabezeilen auf meinem Hauptfenster die folgenden Tastatureigaben erhalten soll.

Wenn nur Eingabezeilen und Buttons auf dem Formular sind, könnte man sequentiell vorgehen. Nun kann aber auch eine Schaltfläche da sein, deren Betätigung einen Dialog erscheinen lässt, auf dem wiederum mehrere Eingabemöglichkeiten vorliegen. AUch dort muss dann die Ereignisverteilung funktionieren. Daher meine rekursive Lösung in meinem Quelltext.

Ist der im obigen Quelltext formulierte Ablauf so richtig?

Ich bin mir mit der Abbruchbedingung nicht sicher. Die Rekursion muss ja aufhören, wenn ich an dem per Tab oder mit der Maus ausgewählten Objekt angekommen bin. Wie formuliere ich das im Quelltext?
  Mit Zitat antworten Zitat