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;
|