Autor Beitrag
Pharao
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.08.09 12:35 
Hallo zusammen

Ich möchte Komponenten (z.B. ein Button oder ein Panel) auf der Form per Drag und Drop verschieben. Zur Erklärung hab ich das grafisch dargestellt (siehe Anhang). Der Button sollte beim Plazieren an eine bestimmte Position wie von einem Magnet angezogen werden beim Ablegen.
Wer Ideen hat, bitte schreibt.

Gruss
Pharao

Moderiert von user profile iconNarses: BMP->PNG
Einloggen, um Attachments anzusehen!
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 27.08.09 13:22 
Moin und willkommen hier.

Ich würde die roten Ablagen als Panels machen. Bei den Buttons stellst Du DragMode auf auf dmAutomatic

Jetzt musst Du noch bei den Panels OnDragOver und OnDragDrop implementieren. Bei OnDragOver prüfst Du, ob ein Button von Dir dort drüber gezogen wird und wenn ja, dann Accept auf true setzen. Und bei OndragDrop setzt Du die Postion des Buttons (left und top) so, dass der Button hübsch mittig auf dem Panel liegt.

Hoffe, damit hast Du einen Ansatz.

Edit: Kleines Codebeispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm3.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
var btn : TButton;
    pnl : TPanel;
begin

  btn := TButton(Source);
  pnl := TPanel(Sender);

  btn.Top := pnl.Top;
  btn.Left := pnl.Left;


end;

procedure TForm3.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin

  accept := (Source = Button1);

end;


Jens

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Pharao
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 27.08.09 19:17 
Hallo Jens

Vielen herzlichen Dank für Dein Input. Ich werde das ganze am Wochenende ausprobieren. Ich gib dann Bescheid. Vorerst hab Dank für den Lösungsansatz.

Gruss
Pharao
Pharao
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 01.09.09 04:54 
Hallo Jens

Hab Dein Code genommen und ein Beispiel kreiert. Die Positionierung macht mir Sorgen. Bitte schau den ScreenShot an. Die Position wohin der Button geschoben wird beim Drop versteh ich nicht. Er setzt den Button auf jeden Fall an den falschen Ort. Kannst Du mir helfen ?
TTextRelief ist eine eigene Komponente mit Drag und Drop - Standardfunktionen.

Mein QuellCode zum beigefügten ScreenShot:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TMain.TextRelief1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
accept := (Source = Button1);
TextRelief1.colortext:=clred;
end;

procedure TMain.TextRelief1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var btn : TButton;
    rel : TTextrelief;
begin

  btn := TButton(Source);
  rel := TTextrelief(Sender);

  btn.Top := rel.Top;
  btn.Left := rel.Left;

end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Einloggen, um Attachments anzusehen!
Pharao
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 01.09.09 06:34 
Hallo zusammen

Hab das Problem weitgehend gelöst. Ich gib die Top - und Left - Zahlen von Hand ein:

Hier meine Lösung:
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:
procedure TMain.TextRelief1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var btn : TButton;
    rel : TTextrelief;
    bit : TBitBtnWithColor;
begin
  bit := TBitBtnWithColor(Source);
  btn := TButton(Source);
  rel := TTextrelief(Sender);

  {btn.Top := rel.Top;
  btn.Left := rel.Left; }

  btn.Top := 88;
  btn.Left := 370;
  Textrelief1.colortext:=cllime;

  bit.Top := 88;
  bit.Left := 370;
 // Textrelief1.colortext:=clmaroon;
  BitBtnWithColor1.color:=clred;

end;

Gruss
Pharao

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt