Entwickler-Ecke
Sonstiges (Delphi) - Drag_Drop
Delete - Do 27.08.09 12:35
Titel: Drag_Drop
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
Narses: BMP->PNG
Nersgatt - 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:
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
Delete - 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
Delete - 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:
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
Narses: Delphi-Tags hinzugefügt
Delete - 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:
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 := 88; btn.Left := 370; Textrelief1.colortext:=cllime;
bit.Top := 88; bit.Left := 370; BitBtnWithColor1.color:=clred;
end; |
Gruss
Pharao
Moderiert von
Narses: Delphi-Tags hinzugefügt
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!