![]() |
Drag & Drop
Hallo ich suche eine Lösung für ein Drag and Drop Problem. Ich möchte gerne einen Tbutton auf eine vorgegebene Position z.B. ein Panel mit der gleichen größe Umbewegen. Das Bewegen geht aber er soll auf der Panel Position einrasten wenn ich die linke maus taste los lasse. Hier mal mein Bisheriger Code.
Delphi-Quellcode:
procedure TForm1.SchaltflaecheMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var r:TRect; begin SchaltflaecheUmbewegen := TLMDDockSpeedButton (Sender); if [ssLeft,ssRight]*Shift=[ssLeft,ssRight] then exit; with TControl(Sender) do begin p :=ClientToScreen(Point(x,y)); r :=Parent.ClientRect; r.TopLeft :=Parent.ClientToScreen(r.TopLeft); r.BottomRight :=Parent.ClientToScreen(r.BottomRight); inc(r.Left,x); dec(r.Right,Width-x); inc(r.Top,y); dec(r.Bottom,Height-y); ClipCursor(@r); end; end; procedure TForm1.SchaltflaecheMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); var mpos:TPoint; begin if [ssLeft,ssRight]*Shift=[] then exit; with TControl(Sender) do begin mpos :=ClientToScreen(Point(x,y)); x := mpos.x - p.x; y := mpos.y - p.y; SetBounds(Left+x,Top+y,Width,Height); p := mpos; end; end; procedure TForm1.SchaltflaecheMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer); begin if [ssLeft,ssRight]*Shift<>[] then exit; ClipCursor(nil); end; |
AW: Drag & Drop
Delphi-Quellcode:
Das funktioniert schonmal wie bekomme ich es hin das er statt panel2 das Panel nimmt wo der Mauszeiger ist?
procedure TForm1.SchaltflaecheMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin if (sender is TLMDDockSpeedButton) then TLMDDockSpeedButton(Sender).Left:=Panel2.Left; TLMDDockSpeedButton(Sender).top:=Panel2.top; TLMDDockSpeedButton(Sender).BringToFront; if [ssLeft,ssRight]*Shift<>[] then exit; end; |
AW: Drag & Drop
Ich sehe hier gleich 2 Fehler:
Delphi-Quellcode:
procedure TForm1.SchaltflaecheMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin if (sender is TLMDDockSpeedButton) then begin // hat gefehlt TLMDDockSpeedButton(Sender).Left:=Panel2.Left; TLMDDockSpeedButton(Sender).top:=Panel2.top; TLMDDockSpeedButton(Sender).BringToFront; end; // hat gefehlt if [ssLeft,ssRight]*Shift<>[] then exit; // völlig sinnlos, da kein weiterer Code folgt end; // und warum werden die Parameter x und y übergeben obwohl dann die Position von "panel2" benützt wird ? |
AW: Drag & Drop
x und y werden Übergeben weil ich den Button beim Drag and drop mit sichtbar halte und ihm beim ziehen über die form sehen will.
|
AW: Drag & Drop
Zitat:
|
AW: Drag & Drop
okay.
Wie bekomme ich denn das Panel raus über dem sich der cursor befindet? |
AW: Drag & Drop
Zitat:
![]() ![]() Es gibt auch noch etwas ganz Neues ![]() Allerdings frage ich mich warum du kein Drag'n'Drop machen möchtest, sondern irgendwie da was herumbastelst? ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz