Drag&Drop von TStringGrid auf TTreeView funktioniert so weit, aber leider nicht sauber. Teilweise bringt er dabei den falschen Schlüssel. Vielleicht erkennt Ihr ja den Fehler... wäre toll.
a) tStringGrid: Beim MouseDown ereignis wird das BeginDrag initialisiert, die Koordinaten der aktuellen Zelle ermittelt und in Col/Row gesichtert, damit später darauf zurückgegriffen werden kann.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TfMain.sgPfgModMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var c, r: integer; begin (sender as tstringgrid).BeginDrag(false); (sender as tstringgrid).MouseToCell(x, y, c, r);
(sender as tstringgrid).col := c; (sender as tstringgrid).row := r; end; |
b) tTreeView: hier wird dann beim DragDrop die Zeile aus dem StringGrid ausgelesen, somit stehen die Koordinaten des Stringgrids in tStringgrid(source).col und tStringgrid(source).row.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TfMain.tvPfgModDragDrop(Sender, Source: TObject; X, Y: Integer); var r, c: integer; node: ttreeNode; i: integer; s: string; begin if (source is tstringgrid) then begin r := (source as tstringgrid).Row; c := 0; node := (sender as tTreeView).GetNodeAt(x, y); |
Das Funktioniert so weit, aber teilweise wird der falsche Schlüssel zurückgegeben. An was könnte dies liegen?
