Die virtuelle Maus
oder das Weiterleiten eines Ereignisses an den, den es betrifft
Bei einer "Welt-Bild-Modellierung" steht man vor dem Problem, dass die wirkliche Maus natürlich
nur Maus-Ereignisse auf dem Bildschirm, also im 
Bild, auslösen kann. Man möchte aber z.B.
auswerten, ob man in ein Polygon in der 
Welt hineingeklickt hat. Das Ganze lässt sich lösen,
wenn man bei einem Bild-Maus-Ereignissen die Maus-Koordinaten in die 
Welt transformiert und ein
"virtuelles" Maus-Ereignis in der 
Welt auslöst. Bei dieser Gelegenheit lassen sich Informationen
über gedrückte Maus- oder Shift-Tasten umkodieren. Die folgenden Quelltext-Auszüge zeigen das
Vorgehen bei der Tangram-Realisierung.
 
  procedure TGUI.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  var
    Taste  : byte;       // 0=keine Taste, 1=linke Taste, 2=rechte Taste
    wShift : boolean;    // true=Shift-Taste gedrückt
  begin
    wShift := (ssShift in Shift);  // Shift ist eine Menge (set)
    Taste := 0;
    if Button = mbLeft  then Taste := 1;
    if Button = mbRight then Taste := 2;
    Teile.OnMouseDown(xt(x),yt(y),Taste,wShift); // Weiterleiten des Ereignisses
    GUI.zeichneTeile;
  end;
  procedure TGUI.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
    Teile.OnMouseUp; // Weiterleiten des Ereignisses 
  end;
  procedure TGUI.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
  begin
    Teile.OnMouseMove(xt(x),yt(y));  // Weiterleiten des Ereignisses
    zeichneTeile;
  end;
 |