Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi einfaches Drag & Drop und MouseUp (https://www.delphipraxis.net/193040-einfaches-drag-drop-und-mouseup.html)

Alex_ITA01 14. Jun 2017 07:46

AW: einfaches Drag & Drop und MouseUp
 
Oh jetzt sehe ich was ihr meintet mit der Vertauschung. Stimmt habe Sender mit Source vertauscht, mein Fehler.
Ich versuche das mal mit dem MouseMove, dachte es würde für diesen Fall noch "Bordmittel" geben ;-)

Danke für deine Änderung, habe Sie erst jetzt gesehen ;-)

Fritzew 14. Jun 2017 07:59

AW: einfaches Drag & Drop und MouseUp
 
Aus der Hilfe:
Zitat:

Mit BeginDrag kann das Ziehen eines Steuerelements gestartet werden. Die Methode wird in einer Anwendung nur explizit aufgerufen, wenn die Eigenschaft DragMode des betreffenden Steuerelements den Wert dmManual hat. Bei der Einstellung dmAutomatic wird BeginDrag automatisch aufgerufen.

Wenn der Parameter Immediate true ist, wird dem Mauszeiger die Cursorform der Eigenschaft DragCursor zugewiesen und der Ziehvorgang umgehend gestartet. Hat Immediate den Wert false, wird die Form des Mauszeigers nicht geändert und das Ziehen erst begonnen, wenn der Benutzer den Mauszeiger um die in Threshold angegebene Pixelanzahl verschiebt. Ist Threshold kleiner als 0, wird der Wert aus der Eigenschaft DragThreshold der globalen Variable Mouse gelesen.

Durch Setzen von Immediate auf false kann das Steuerelement Mausklicks entgegennehmen, ohne dass eine Drag&Drop- oder Drag&Dock-Operation begonnen wird.
Es reicht also wenn Du Threshold setzt. Allerdings wird von BeginDrag sofort ein WM_LBUTTONUP an das Label geschickt siehe:

in BeginDrag:

Delphi-Quellcode:
  if csLButtonDown in ControlState then
    begin
      GetCursorPos(P);
      Perform(WM_LBUTTONUP, 0, PointToLParam(ScreenToClient(P)));
    end;
Dadurch wird Dein Flag StartDragging immer true sein im MouseUp.

Alex_ITA01 14. Jun 2017 08:28

AW: einfaches Drag & Drop und MouseUp
 
Nicht wenn ich im MouseMove das so mache:

Delphi-Quellcode:
if (ssLeft in Shift) and
   ((Abs(LastPoint.X - X) > 6) or
    (Abs(LastPoint.Y - Y) > 6)) then
begin
  StartDragging := True;
  Label1.BeginDrag(False, 8);
  StartDragging := False;
end;
LastPoint wurde im MouseDown gesetzt.
Damit ist StartDragging nicht immer True im MouseUp

Fritzew 14. Jun 2017 08:39

AW: einfaches Drag & Drop und MouseUp
 
Delphi-Quellcode:
if (ssLeft in Shift) and
   ((Abs(LastPoint.X - X) > 6) or
    (Abs(LastPoint.Y - Y) > 6)) then
begin
  StartDragging := True;
  Label1.BeginDrag(False, 8);
  StartDragging := False;
end;
Ich würde aber in dem Fall
Delphi-Quellcode:
 Label1.BeginDrag(true);
aufrufen. Sonst muss der User noch mal um 8 pixel verschieben :-)

Alex_ITA01 14. Jun 2017 08:41

AW: einfaches Drag & Drop und MouseUp
 
Eine Frage hätte ich dennoch:
Im Windows kann man ja während man ein Ordner oder ähnliches gedraggt hat (noch nicht losgelassen!) mit der STRG Taste umschalten zwischen verschieben oder kopieren. Das müsste ja dann beim DragDropEvent abgefragt werden können. Wisst ihr wie ich da ran komme an die Info, ob das DragDropEvent mit gedrückter oder nicht gedrückter STRG Taste durchgeführt wurde?

Edit:
Fritzew: Da hast du Recht :-D

Fritzew 14. Jun 2017 08:57

AW: einfaches Drag & Drop und MouseUp
 
Zitat:

Eine Frage hätte ich dennoch:
Im Windows kann man ja während man ein Ordner oder ähnliches gedraggt hat (noch nicht losgelassen!) mit der STRG Taste umschalten zwischen verschieben oder kopieren. Das müsste ja dann beim DragDropEvent abgefragt werden können. Wisst ihr wie ich da ran komme an die Info, ob das DragDropEvent mit gedrückter oder nicht gedrückter STRG Taste durchgeführt wurde?
Kannst Du abfragen mit
Delphi-Quellcode:
if GetKeyState(VK_CONTROL) < 0 then

Alex_ITA01 14. Jun 2017 09:14

AW: einfaches Drag & Drop und MouseUp
 
Geht, vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr.
Seite 2 von 2     12   

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