![]() |
Shape nur im 45° Winkel bewegen
Ich verschiebe mit der Maus eine Shape:
Delphi-Quellcode:
Jetzt ist es aber so, dass man dieses Shape nur diagonal im 45° Winkel von links oben nach recht unter verschieben können darf. Also auch wenn ich die Maus seitwärts bewege muss das Shape sich nach rechts unten bewegen. Hinzukommt, dass sich das Shape auch bewegen muss, wenn die Maus aufgrund der Bewegung das Shape verlässt.
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin XMouseDown := X; YMouseDown := Y; IsOver := true; end; procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IsOver := False; end; procedure TForm1.FormCreate(Sender: TObject); begin IsOver := False; end; procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if isOver then begin Caption := IntToStr(X); Shape1.Left := Shape1.Left + X - XMouseDown; Shape1.Top := Shape1.Top + Y - YMouseDown; end; end; |
Re: Shape nur im 45° Winkel bewegen
Muss es sich auch bei vertikaler Mausbewegung entsprechend bewegen? Ist die Diagonale im 45° Winkel? Wenn das erste nicht, aber das zweite schon zutrifft, ist das Benutzen der X-Änderung auch für Y z.B. eine Möglichkeit.
Edit: Okay, die 45° haben sich so eben geklärt. Ich hab den Titel mal aufmerksam gelesen :) |
Re: Shape nur im 45° Winkel bewegen
Ja. Auch wenn ich die Maus irgendwie schräg bewege muss es sich im 45° Winkel bewegen. Es soll sich so verhalten wie die Punkte zum Anfassen für Größenänderungen an Objekten in den Ecken, wenn das Objekt nur proportional in der Größe verändert werden kann. Das heißt wenn ich die Maustaste über dem Objekt drücke und dann die Maus bewege, muss ich das Shape mitbewegen. Wenn ich die Maus (mit gedrückter Maustaste) waagerecht nach rechts bewege, muss sich das Shape entsprechend im 45° Winkel nach rechts unten bewegen. Dass dabei die Maus das Shape verlässt ist klar. Umgekehrt, wenn ich die Maus (mit gedrückter Maustaste) nach links bewege, muss sich das Shape im 45^Winkel nach links oben bewegen. Und das ganze soll abgebrochen werden, wenn ich die maustaste wieder los lasse.
Wichtig dabei ist, möglichst ohne Windows Funktionen auszukommen, da ich das in Wirklichkeit in Flex und ActionScript realisieren muss. :( Ich habe es mir jetzt nur mal in Delphi angeguckt, weil ich da etwas sicherer unterwegs bin und das Prinzioüp das gleiche sein müsste. ;) |
Re: Shape nur im 45° Winkel bewegen
Moin,
hab grad mal rumgespielt: Ist das so in etwa wie du dir das denkst?
Delphi-Quellcode:
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin XMouseDown := X; YMouseDown := Y; XStart := Shape1.Left; YStart := Shape1.Top; IsOver := true; end; procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if isOver then begin Shape1.Left := Shape1.Left + x - XMouseDown; Shape1.Top := YStart - XStart + Shape1.Left; end; end; |
Re: Shape nur im 45° Winkel bewegen
Ich habe es so gemacht:
Delphi-Quellcode:
type
TForm1 = class(TForm) Shape1: TShape; procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } FPos: TPoint; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FPos := Point(X,Y); end; procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then begin Shape1.Left := Shape1.Left + (X - FPos.X); Shape1.Top := Shape1.Top + (X - FPos.X); end; end; |
Re: Shape nur im 45° Winkel bewegen
Perfekt. :thumb: Ich habe mir schon überlegt, ob das irgendwie mit sinus und cosinus geht oder so. Jetzt muss ich das ganze nur noch nach Flex übertragen. :roll:
|
Re: Shape nur im 45° Winkel bewegen
Hallo,
du könntest auch deine Maus Koordinate auf einen Punkt einer Linie mappen. Die Linie hat einen Punkt auf der Shape Koordinate und einen weiteren im entsprechenden 45Grad Winkel dazu. Du musst nur den kürzesten Abstand von der Maus Koordinate auf diese Linie berechnen und welcher Punkt auf der Linie dazu korrespondiert. Auf diesen Punkt schiebst du dann dein shape. Mfg Der Dan |
Re: Shape nur im 45° Winkel bewegen
Zitat:
|
Re: Shape nur im 45° Winkel bewegen
Funktioniert leider nur halb. So bald unter Flex der Mauszeiger das Shape verlässt, bewegt es sichnicht mehr. Aber da werde ich mal näher im einem Felx Forum fragen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz