![]() |
Datenbank: SQLite • Version: ? • Zugriff über: UniDac
Drag & Drop DBGrid
Hallo zusammen...
ich hoffe ich hab den richtigen Foren Bereich genommen mit meiner Frage... Ich möchte über Drag & Drop Daten von einer DBGrid Zelle in eine andere DBGrid Zelle kopieren... D.h. der User soll im DBGrid_1 auf eine Zelle klicken, und beim Klick auf eine Zelle im DBGrid_2 werden dort die Werte eingefügt/überschrieben... Der folgende Source funktioniert bei mir bereits:
Delphi-Quellcode:
Folgendes gefällt mir noch nicht so richtig...
type THackDBGrid = class(TDBGrid);
procedure Tmain_form.dbgrid_commissionsCellClick(Column: TColumn); begin If (rdbtn_addtoparcel.Checked) Then Begin dbgrid_commissions.BeginDrag(True); End; end; procedure Tmain_form.dbgrid_parcelsDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := Source Is TDBGrid; end; procedure Tmain_form.dbgrid_parcelsDragDrop(Sender, Source: TObject; X, Y: Integer); var gc : TGridCoord; s : String; begin If (rdbtn_addtoparcel.Checked) Then Begin gc := THackDBGrid(dbgrid_parcels).MouseCoord(X,Y); If (gc.X > 0) And (gc.Y > 0) then begin s := Commissions.FieldByName('Quantity').AsString; With THackDBGrid(dbgrid_parcels) Do Begin DataSource.DataSet.MoveBy (gc.Y - Row); DataSource.DataSet.Edit; Columns.Items[-1 + gc.X].Field.AsString := s; end; end; End; end; procedure Tmain_form.dbgrid_parcelsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var gc: TGridCoord; begin gc:= dbgrid_parcels.MouseCoord(x, y); If (gc.X > 0) And (gc.Y > 0) Then Begin dbgrid_parcels.DataSource.DataSet.MoveBy(gc.Y - THackDBGrid(dbgrid_parcels).Row); End; end; Die OnMouseMove Eigenschaft im Empfangenden dbgrid_parcels wurde überschrieben um herauszufinden in welcher Zelle die Daten eingefügt werden sollen (die Methode habe ich im Internet gefunden)... Allerdings bewirkt das jetzt auch dass sobald sich die Maus in Bereich des dbgrid_parcels befindet und sich dort auf und ab bewegt die Zeile gewechselt wird... Das sieht man z.B. am Scrollbalken an der Seite... Wie kann ich das abstellen??? |
AW: Drag & Drop DBGrid
Du musst doch nur wissen, ob gerade 'gedragged' wird, oder? Dann führst Du das tracken im OnMouseMove eben nur dann aus.
|
AW: Drag & Drop DBGrid
Danke für den Tipp...
Ich hab das Zellen ermitteln jetzt auf das OnMouseDown Ereignis abgeändert (war für mich logischer) und prüfe zusätzlich das Dragging: So gehts jetzt...
Delphi-Quellcode:
procedure Tmain_form.dbgrid_parcelsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var gc: TGridCoord; begin If (dbgrid_commissions.Dragging) Then Begin If (ssLeft In Shift) Then Begin gc:= dbgrid_parcels.MouseCoord(x, y); If (gc.X > 0) And (gc.Y > 0) Then Begin dbgrid_parcels.DataSource.DataSet.MoveBy(gc.Y - THackDBGrid(dbgrid_parcels).Row); End; End; End; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 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