Autor Beitrag
hui1991
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Sa 07.04.07 20:32 
Hallo,

ich habe hier einen Code für das Verschieben von Objekten:
ausblenden volle Höhe 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
    { Private declarations }
  public
    { Public declarations }

    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;   //SpinEdit1.Value := 8
  Copy.Left:=((Button(Sender).Left+Form1.x-(Button(Sender).Width div 2)) div SpinEdit1.Value) * SpinEdit1.Value;  //SpinEdit1.Value := 8
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66

WinXP Prof., Vista
Delphi6, Delphi 2009, Java(Eclipse), C++, Basic
BeitragVerfasst: 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..

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: 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_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: 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