Entwickler-Ecke
Sonstiges (Delphi) - Objekte Verschieben
hui1991 - Sa 07.04.07 20:32
Titel: Objekte Verschieben
Hallo,
ich habe hier einen Code für das Verschieben von Objekten:
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: 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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Spin;
type TForm1 = class(TForm) Button1: TButton; Copy: TButton; Timer1: TTimer; SpinEdit1: TSpinEdit; Label1: TLabel; procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private public
x,y: Integer; end;
var Form1: TForm1; xx,yy: Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Form1.x:=x; Form1.y:=y; Copy.Top:=((Button(Sender).Top+Form1.y-(Button(Sender).Height div 2)) div SpinEdit1.Value) * SpinEdit1.Value; Copy.Left:=((Button(Sender).Left+Form1.x-(Button(Sender).Width div 2)) div SpinEdit1.Value) * SpinEdit1.Value; end;
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Copy.Width:=TButton(Sender).Width; Copy.Height:=TButton(Sender).Height; Copy.Caption:=TButton(Sender).Caption; Copy.Top:=TButton(Sender).Top; Copy.Left:=TButton(Sender).Left; Copy.Visible:=True; xx:=Copy.Top+Form1.x; yy:=Copy.Left+Form1.y; Timer1.Enabled:=True; end;
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Timer1.Enabled:=False; Copy.Visible:=False; TButton(Sender).Left:=Copy.Left; TButton(Sender).Top:=Copy.Top; end;
end. |
So es funktioniert ja auch. Ich habe hier so Fragen dafür.
Wie macht man es besser lösen?
Es sollen alle Objekte verschiebbar sein.
Kann man die Prozedur für jedes Objekt verwenden oder muss man für Button eins machen, für Edit eins machen, für ListBox eins machen?
Das ziel ist ja das man sich das Programmieren erleichtert.
Die Geschwindigkeit spielt hier ja keine Rolle.
Hoffe ihr versteht was mein Ziel ist und hoffe das es bessere Möglichkeiten gibt ^^
Sollte man ein Image nehmen und ein Screen rein laden?
MfG
hui1991
hui1991 - Do 19.04.07 19:54
Hat niemand eine Idee wie man das verbessern kann?
Ich habe es selber gemacht, aber naja das gefällt mir nicht.
Finde aber keine andere Möglichkeit es anders zu machen.
Hoffe jemand kann mir helfen.
MfG
hui1991
Magic J - Do 19.04.07 20:18
Hi
also ich versteh zwar net, wofür du hier nen Timer brauchst...
(muss man sehen, wo der alte Button war ?)
...aber ich hätte da ne Lösung, die nicht ganz so aufwengig ist(aussieht)!
Funktioniert sogut wie mit allen Objekten (alle die vom typ "TControl" abgeleitet werden)
also Button, Edit, Label usw..
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:
| Var MausStartX,MausStartY,Cx,Cy:Integer; Gedrueckt:Boolean;
procedure TForm1.ObjektMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Gedrueckt:=true; Cx:=TControl(Sender).Left; Cy:=TControl(Sender).Top; MausStartx:=Mouse.CursorPos.X; MausStarty:=Mouse.CursorPos.Y; end;
procedure TForm1.ObjektMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if not Gedrueckt Then exit; TControl(Sender).Left:=Cx+Mouse.CursorPos.X-MausStartX; TControl(Sender).Top:=Cy+Mouse.CursorPos.Y-MausStartY; end;
procedure TForm1.ObjektMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Gedrueckt:=false; end; |
Diese 3 Proceduren dann halt jedem Teil zuweisen, dass du nachher bewegen willst!
(Geht übrigens auch mit TForm´s)
Gruß Jonas
hui1991 - Mo 14.05.07 09:57
Danke,
das ist genau das was ich wollte.
Weis aber net ob es noch besser geht, aber denke das geht.
Ich wollte ein Editor machen wie der von Delphi.
Nur sowas ähnliches.
Damit könntem an dann Puzzelspiele machen.
MfG
hui1991
_frank_ - Di 15.05.07 00:21
ich empfehl dir das TSizeCtrl von Angus Johnson (
http://www.angusj.com/delphi/).
Damit hab ich den Form-Designer in meinem DFM-Editor gemacht.
Gruß Frank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!