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:
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;
Folgendes gefällt mir noch nicht so richtig...
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???