Autor |
Beitrag |
V!P3R
      
Beiträge: 151
|
Verfasst: So 02.12.07 11:06
sodass man es bearbeiten kann?
Ich habe mehrere TShapes. per klick auf das shape soll es markiert sein. und das soll der user an irgenteiner veränderung feststellen können. von diesem shape soll er die größe, farbe, position,usw verändern können.
am besten wäre das so, dass man das shape größer ZIEHEN kann, und nicht in ein EDITFELD die werte eingeben muss, geht das irgentwie?
MfG
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 02.12.07 11:38
gehen tut alles
guck dir das mal an, da steht, wie man eine Form mit bsNone verschiebt. Ist eigentlich das selbe Problem, wie du hast.
www.delphi-forum.de/...59508&highlight=
Mit dem OnClick weißt du, welches Shape ausgewählt ist. Dann kannst du z.B. eine ColorBox verwenden, um das Shape umzufärben.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 02.12.07 12:14
ja vielen dank
hab aber noch zwei probleme
erstens: der Name des objektes setzt sich zusammen aus 'Shape' und einem Integerwert.:
www.delphi-forum.de/...tellen_78746,20.html
zweitens: bei folgendem code springt das TShape immer ungefähr um +100 Left und +100 Top:
Shap: TShape (Beispiel Shape. Die anderen werden selbst produziert, siehe link)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.ShapMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousPosX:=X; MousPosY:=Y; MousePress:=true; end;
procedure TForm1.ShapMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if MousePress=True then begin Shap.Left:=Mouse.CursorPos.X-MousPosX; Shap.Top:=Mouse.CursorPos.Y-MousPosY; end; end;
procedure TForm1.ShapMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousePress:=False; end; |
MfG
PS: hab oft editiert, gab probleme mit Delphi Code
Zuletzt bearbeitet von V!P3R am So 02.12.07 12:19, insgesamt 1-mal bearbeitet
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 02.12.07 12:17
Delphi-Quelltext 1: 2:
| Shap.Left:=Mouse.CursorPos.X-MousPosX; Shap.Top:=Mouse.CursorPos.Y-MousPosY; |
ich vermute mal:
Mouse.CursorPos.X gibt die Position der Maus auf dem Bildschirm an. Also musst Form1.ScreentoClient(Mouse.CursorPos).X benutzen
um für alle Shapes das zu machen, nimmst du bei allen Shapes das gleiche Event (OnMouseDown usw). Dann kannst du mit TShape[FindComponent('Shape'+inttostr(Shape.Tag))] arbeiten (wenns Shape.Tag nicht gibt, dann nehm den Hint dazu)
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 02.12.07 12:23
Delphi-Quelltext 1: 2:
| Shap.Left:=Form1.ScreentoClient(Mouse.CursorPos).X; Shap.Top:=Form1.ScreentoClient(Mouse.CursorPos).Y; |
so gehts. nur KLEINER fehler. maus springt in die linke ecke des objektes (indem fall also Shap)
bzw das objekt (Shap) springt so, dass die maus in der oberen linken ecke ist.
EDIT: Ja aber die Shapes werden doch erst erstellt. wie kann ich dann die OnMouseUp function bestimmen?
Hier der komplette code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| var Form1: TForm1; Int: Integer = 0; MousePress: boolean; MyShape: TShape; MousPosX,MousPosY: integer;
implementation
{$R *.dfm}
procedure TForm1.B_AddShapeClick(Sender: TObject); begin Inc(Int);
MyShape := TShape.Create(Form1); try MyShape.Name := 'Shape' + IntToStr(Int); MyShape.Parent := Form1; MyShape.Tag := Int; MyShape.Left := 140; MyShape.Top := 56; MyShape.Width := 100; MyShape.Height := 100; MyShape.Brush.Color:=clRed; MyShape.Show;
finally end; end; procedure TForm1.ShapeClick(Sender: TObject); begin ShowMessage('Es wurde Shape '+InttoStr(Int)+ ' ausgewählt.'); end;
procedure TForm1.ShapMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousPosX:=X; MousPosY:=Y; MousePress:=true; end;
procedure TForm1.ShapMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if MousePress=True then begin Shap.Left:=Form1.ScreentoClient(Mouse.CursorPos).X; Shap.Top:=Form1.ScreentoClient(Mouse.CursorPos).Y; end; end;
procedure TForm1.ShapMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousePress:=False; end; |
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 02.12.07 12:32
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Mr. Hunt
      
Beiträge: 25
|
Verfasst: So 02.12.07 12:41
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 02.12.07 14:32
ach, logisch, sry 
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 02.12.07 19:25
bei folgendem Code klapps fast, aber man kann 'MyShape' nicht bewegen, wenn man drauf geht
und wenn man auf form 1 klickt verschwindet MyShape oben links in der ecke. woran liegt das, und vorallem, wie kann ich das ändern.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if MousePress=True then begin MyShape.Left:=Form1.ScreentoClient(Mouse.CursorPos).X-MousPosX; MyShape.Top:=Form1.ScreentoClient(Mouse.CursorPos).Y-MousPosY; end; end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousPosX:=X; MousPosY:=Y; MousePress:=true; end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousePress:=False; end; |
Das klappt schon mal nicht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.MyShapeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if MousePress=True then begin MyShape.Left:=Form1.ScreentoClient(Mouse.CursorPos).X-MousPosX; MyShape.Top:=Form1.ScreentoClient(Mouse.CursorPos).Y-MousPosY; end; end;
procedure TForm1.MyShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousPosX:=X; MousPosY:=Y; MousePress:=true; end;
procedure TForm1.MyShapeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousePress:=False; end; |
die frage ist: wie ertselle ich eine OnMouse... fucktion für MyShape???
MfG
Hier mein kompletter code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117:
| var Form1: TForm1; Int: Integer = 0; MousePress: boolean; MyShape: TShape; MousPosX,MousPosY: integer;
implementation
{$R *.dfm}
procedure TForm1.B_AddShapeClick(Sender: TObject); begin Inc(Int);
MyShape := TShape.Create(Form1); try MyShape.Name := 'Shape' + IntToStr(Int); MyShape.Parent := Form1; MyShape.Tag := Int; MyShape.Left := 140; MyShape.Top := 56; MyShape.Width := 100; MyShape.Height := 100; MyShape.Brush.Color:=clRed; MyShape.Show;
finally end; end; procedure TForm1.ShapeClick(Sender: TObject); begin ShowMessage('Es wurde Shape '+InttoStr(Int)+ ' ausgewählt.'); end;
procedure TForm1.ShapMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousPosX:=X; MousPosY:=Y; MousePress:=true; end;
procedure TForm1.ShapMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if MousePress=True then begin Shap.Left:=Form1.ScreentoClient(Mouse.CursorPos).X-MousPosX; Shap.Top:=Form1.ScreentoClient(Mouse.CursorPos).Y-MousPosY; end; end;
procedure TForm1.ShapMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousePress:=False; end;
procedure TForm1.Button1Click(Sender: TObject); begin MyShape.Top:=12;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if MousePress=True then begin MyShape.Left:=Form1.ScreentoClient(Mouse.CursorPos).X-MousPosX; MyShape.Top:=Form1.ScreentoClient(Mouse.CursorPos).Y-MousPosY; end; end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousPosX:=X; MousPosY:=Y; MousePress:=true; end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousePress:=False; end;
procedure TForm1.MyShapeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if MousePress=True then begin MyShape.Left:=Form1.ScreentoClient(Mouse.CursorPos).X-MousPosX; MyShape.Top:=Form1.ScreentoClient(Mouse.CursorPos).Y-MousPosY; end; end;
procedure TForm1.MyShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousPosX:=X; MousPosY:=Y; MousePress:=true; end;
procedure TForm1.MyShapeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MousePress:=False; end;
end. |
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 02.12.07 20:23
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
V!P3R 
      
Beiträge: 151
|
Verfasst: So 02.12.07 20:47
bei einem OnMouseMoveEvent ist das aber nicht so einfach.
|
|
|