AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Shape nur im 45° Winkel bewegen

Ein Thema von Luckie · begonnen am 9. Okt 2008 · letzter Beitrag vom 9. Okt 2008
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Shape nur im 45° Winkel bewegen

  Alt 9. Okt 2008, 09:24
Ich verschiebe mit der Maus eine Shape:
Delphi-Quellcode:
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;
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Shape nur im 45° Winkel bewegen

  Alt 9. Okt 2008, 09:34
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
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Shape nur im 45° Winkel bewegen

  Alt 9. Okt 2008, 09:37
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benedikt
(Gast)

n/a Beiträge
 
#4

Re: Shape nur im 45° Winkel bewegen

  Alt 9. Okt 2008, 09:54
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Shape nur im 45° Winkel bewegen

  Alt 9. Okt 2008, 09:55
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Shape nur im 45° Winkel bewegen

  Alt 9. Okt 2008, 10:02
Perfekt. 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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#7

Re: Shape nur im 45° Winkel bewegen

  Alt 9. Okt 2008, 10:07
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
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Shape nur im 45° Winkel bewegen

  Alt 9. Okt 2008, 10:14
Zitat von Luckie:
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.
Genau so mache ichs immer bei Java
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Shape nur im 45° Winkel bewegen

  Alt 9. Okt 2008, 10:26
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz