Spalte in TDBGrid ermitteln per DragDrop

Rund um die LCL und andere Komponenten
Antworten
schorsch
Beiträge: 46
Registriert: Sa 20. Mär 2010, 23:00
OS, Lazarus, FPC: Win10x64, RaspberryPi, MAC
CPU-Target: so ziemlich alles

Spalte in TDBGrid ermitteln per DragDrop

Beitrag von schorsch »

Moin @ALL,
folgendes Problem: Ich habe eine TDBGrid und möchte eine beliebige Spalte an der Überschrift anfassen und zB auf ein Panel ziehen - aber alle Ereignisse liefern irgendwie erst den Spaltennamen, sobald ich die Maustaste loslasse. Vorher steht immer nur die Vorherige drin :-( Ich möchte im Prinzip ne Art Mülleimer realisieren, indem ich die unerwünschte Spalte darauf ziehe und die wird dann automatisch aus dem Grid entfernt.

Wäre super, wenn da einer was zu hätte - schönen Feiertag ;-)

Der Schorsch
der feind der erde ist der mensch

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Spalte in TDBGrid ermitteln per DragDrop

Beitrag von wp_xyz »

Nächste Runde im Rate-Spiel "Was könnte der Programmierer in dem Code, den er nicht zeigt, falsch gemacht haben?"

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Spalte in TDBGrid ermitteln per DragDrop

Beitrag von Michl »

Ich habe es jetzt nicht getestet. Falls sämtliche Operationen tatsächlich erst nach DBGrid.OnMouseUp ausgeführt werden, würde ich den Ansatz in DBGrid.OnMouseDown mit entsprechender eigener Umwandlung Koordinaten zu DBGrid.Column bzw. noch zum Field suchen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

schorsch
Beiträge: 46
Registriert: Sa 20. Mär 2010, 23:00
OS, Lazarus, FPC: Win10x64, RaspberryPi, MAC
CPU-Target: so ziemlich alles

Re: Spalte in TDBGrid ermitteln per DragDrop

Beitrag von schorsch »

Moin nochmal,
also, wenn ich jetzt mal testdisplays innern Memo stelle, dann kommt in angegebener Reihenfolge: (per "TDBGrid(Source/Sender)...")
panel-DragOver: FieldName = ID - index = 0 (accept = true)
panel-DragDrop: FieldName = ID - index = 0
dbgrid-TitleClick: FieldName = Anschrift_Bestellung - index = 0

"dbgrid-TitleClick" kommt halt erst, wenn ich die Maustaste loslasse :-(

wobei die Spalte "id" die erste ist und "Anschrift_Bestellung" die 4.

Wie könnte ich denn per "MousePos" die Spalte herausbekommen? (ähnlich "getItemAt" oder sowas)

Tks vorab..

Der Schorsch
der feind der erde ist der mensch

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Spalte in TDBGrid ermitteln per DragDrop

Beitrag von Michl »

Man könnte das so http://www.lazarusforum.de/viewtopic.php?p=98538#p98538 machen.

Habe darauf basierend nun doch ein Beispiel (DBGrid mit Bufdataset) zusammengestellt. Dabei habe ich darauf geachtet, daß die Columns nur gelöscht werden können, wenn der User auf den Columntitel klickt. Die Columns lösche ich nicht, stelle nur deren Width auf 0. Dies kannst du natürlich anders handhaben.

Weiter könnte man als Dragcursor den Columnnamen statt dem Standard DND-Symbol anzeigen, das habe ich hier aber jetzt nicht eingebaut.

Viel Erfolg!
Dateianhänge
Test DND DBGrid Bufdataset.zip
(3.17 KiB) 58-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

schorsch
Beiträge: 46
Registriert: Sa 20. Mär 2010, 23:00
OS, Lazarus, FPC: Win10x64, RaspberryPi, MAC
CPU-Target: so ziemlich alles

Re: Spalte in TDBGrid ermitteln per DragDrop

Beitrag von schorsch »

wow, supi. Werde es mir heute Abend mal ansehen..
Tks!
Der Schorsch
der feind der erde ist der mensch

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Spalte in TDBGrid ermitteln per DragDrop

Beitrag von Michl »

Michl hat geschrieben:Weiter könnte man als Dragcursor den Columnnamen statt dem Standard DND-Symbol anzeigen
Das hatte ich mir spaßeshalber gestern noch eingebaut. Vielleicht findest du das auch interessant?!
Dateianhänge
Test DND DBGrid Bufdataset mit Title.zip
(3.72 KiB) 80-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

schorsch
Beiträge: 46
Registriert: Sa 20. Mär 2010, 23:00
OS, Lazarus, FPC: Win10x64, RaspberryPi, MAC
CPU-Target: so ziemlich alles

Re: Spalte in TDBGrid ermitteln per DragDrop

Beitrag von schorsch »

Hey, g..!, habs grad mal ausprobiert und gleich in eapea eingebaut und funzt super!

Finde ich echt mega, dass du dir die mühe gemacht hast! Big Tks!

Der Schorsch
der feind der erde ist der mensch

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Spalte in TDBGrid ermitteln per DragDrop

Beitrag von Michl »

Hallo schorsch,

wir waren ein paar Tage auf dem Fjord angeln. Daher habe ich erst jetzt deine Rückmeldung gesehen.

Danke fürs Feedback! Freut mich wenn du damit was anfangen kannst!

Michl

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten