| Autor |
Beitrag |
hui1991
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: Sa 07.04.07 20:32
Hallo,
ich habe hier einen Code für das Verschieben von Objekten:
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
Einloggen, um Attachments anzusehen!
|
|
hui1991 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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
      
Beiträge: 66
WinXP Prof., Vista
Delphi6, Delphi 2009, Java(Eclipse), C++, Basic
|
Verfasst: 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 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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_
      
Beiträge: 343
Erhaltene Danke: 1
Win XP
Delphi 3 Prof / Turbo Delphi Explorer
|
Verfasst: Di 15.05.07 00:21
ich empfehl dir das TSizeCtrl von Angus Johnson ( www.angusj.com/delphi/).
Damit hab ich den Form-Designer in meinem DFM-Editor gemacht.
Gruß Frank
|
|
|