HSG

Aktuelle Seite: HSG/Fächer/Informatik/Material

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;