Delphi-PRAXiS

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/)
-   -   Aus DbGrid Datensatz per Drag&Drop verschieben (https://www.delphipraxis.net/196770-aus-dbgrid-datensatz-per-drag-drop-verschieben.html)

norwegen60 18. Jun 2018 18:08

Aus DbGrid Datensatz per Drag&Drop verschieben
 
Hallo
ich habe ein DbGrid und möchte aus dem einen Datensatz (Zeile) per Drag&Drop auf eine andere Komponente verschieben.
Das Problem:
Wenn ich DragMode auf dmAutomatic setze, lässt sich kein Datensatz per anklicken anwählen. Ausser mit der rechten Maustatse aber wer macht das schon?

Mein Versuch DragMode auf dmManual und dann
Delphi-Quellcode:
procedure TForm.DbGridMouseDown(Sender: TObject;
   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 begin
   if Button = mbLeft then { Drag-Operation nur starten, wenn linke Maustaste gedrückt wird }
     BeginDrag(False, 10); { Falls ja, Drag-Operation starten sobald um mehr als 10 Pixel verschoben }
 end;
schlägt fehl, weil das MousDown nur ausgelöst wird, wenn ich nicht auf einen Datensatz klicke. Also unter die letzte Zeile oder in den Header. Jetzt kann ich zwar zuerst den Datensatz auswählen und dann unter die letzte Zeile gehen und von dort verschieben, aber das ist auch alles andere als normal.
Wie kann ich das MousDown auch bekommen, wenn ich auf einen Datensatz klicke?

Danke für eure Hilfe
Gerd

mischerr 19. Jun 2018 06:33

AW: Aus DbGrid Datensatz per Drag&Drop verschieben
 
Hallo,

also ich mach das hier in einem Projekt genauso.
Aber Du musst das "BeginDrag" des Grids nicht des Forms verwenden!

Also hier: dbgrdXXX.BeginDrag(false, 0);

Zumindest hier (TSMDBGrid) geht das problemlos!

norwegen60 19. Jun 2018 07:27

AW: Aus DbGrid Datensatz per Drag&Drop verschieben
 
Ja natürlich. Das habe ich auch so in meinem Source.
Problem ist aber, dass OnMouseDown nicht aufgerufen wird, wenn ich auf einen Datensatz klicke. Da wird dieses Ereignis abgfangen um den Satzzeiger im Grid zu setzen und dann nicht weitergereicht.

mischerr 19. Jun 2018 08:33

AW: Aus DbGrid Datensatz per Drag&Drop verschieben
 
Zitat:

Ja natürlich. Das habe ich auch so in meinem Source.
Nein, im Code fehlt das "DBGrid." vor dem "BeginDrag()"

Zitat:

Problem ist aber, dass OnMouseDown nicht aufgerufen wird
Alternativ über das MouseMove-Event versuchen:
Delphi-Quellcode:
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if (GetAsyncKeyState(VK_LBUTTON) and $8000)<>0 then
    if not Mouse.IsDragging then
      DBGrid1.BeginDrag(false, 0);
end;

norwegen60 19. Jun 2018 09:07

AW: Aus DbGrid Datensatz per Drag&Drop verschieben
 
Ich meinte in meinem Originalcode. Da hatte ich dbgrAt.BeginDrag drin.

Mit OnMouseMove geht es. Hatte ich auch schon probiert, aber ohne die
Delphi-Quellcode:
if (GetAsyncKeyState(VK_LBUTTON) and $8000)<>0 then
    if not Mouse.IsDragging then
Damit funktioniert es einwandfrei.

Noch eine Idee wie man dafür sorgen kann, dass OnMouseDown durchgereicht werden kann?

Danke
Gerd

mischerr 19. Jun 2018 14:26

AW: Aus DbGrid Datensatz per Drag&Drop verschieben
 
Im Moment hab ich da auch keine einfache Idee.
In dem von mir verwendeten TSMDBGrid ist das MouseDown Event überschrieben.
Frag mal Google danach - die Sourcen sind ja verfügbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz