Hiho!
Ich habe ein kleines Problem mit der "onMouseMove"-Prozedur. Dafür erstmal ein kleiner Überblick über mein Programm:
Was ich machen möchte ist Folgendes: Wenn man mit der linken Maustaste auf das Bild "ImageZoomen" klickt, die Maustaste gedrückt hält und die Maus nach vorne bzw. nach hinten bewegt, dann soll in meinem Programm heran- bzw. weggezoomt werden. (Es handelt sich um ein 3D-Programm in dem man Punkte, Geraden und Ebenen räumlich darstellen kann.)
Mein Ansatz hierfür sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| type TKoordinate = record x, y: integer; end;
var: MausPressed: Boolean; Maus: TKoordinate; |
(relevanter Ausschnitt aus der Kopfzeile)
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TFormTest.ImageZoomenMouseDown(Sender: TObject; Button: TMouseButton; Shift: ShiftState; X, Y: Integer); begin MausPressed := true; Maus.x := Mouse.CursorPos.x; Maus.y := Mouse.CursorPos.y; end; |
Beim drücken der Maustaste auf dem Bild, wird die aktuelle Mausposition in der Variable "Maus" gespeichert. Die Variable "MausPressed" wird auf "true" gesetzt, damit die folgende Prozedur "onMouseMove" ausgeführt wird:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TFormTest.ImageZoomenMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin IF MausPressed THEN BEGIN
VerschiebungKamera(Maus.y-Y); Zeichnen; Mouse.CursorPos := Point(round(Maus.x),round(Maus.y)); END; end; |
Ist die Maustaste gedrückt und die Maus wird vom Benutzer bewegt, so errechnet das Programm die Verschiebung der Kamera, zeichnet die neue 3 dimensionale Umgebung und setzt danach den Mauszeiger wieder zum Anfangspunkt.
Theoretisch funktionieren diese Prozeduren, allerdings habe ich das Problem, dass die Prozeduren "VerschiebungKamera" und "Zeichnen" erst ausgeführt werden, wenn die Maustaste losgelassen wird. Ich möchte allerdings, dass das Bild auch während dem zoomen aktualisiert wird, weil man sonst nicht erkennen kann, wie weit man genau gezoomt hat.
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TFormTest.ImageZoomenMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MausPressed := false; end; |
Die Variable "MausPressed" wird wieder auf "false" gesetzt, damit die "onMouseMove"-Prozedur nicht mehr ausgeführt wird.
Ich hoffe mir kann jemand bei diesem Problem helfen.
>spEEd>