AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drag & Drop DBGrid

Ein Thema von Andidreas · begonnen am 21. Feb 2014 · letzter Beitrag vom 21. Feb 2014
Antwort Antwort
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Drag & Drop DBGrid

  Alt 21. Feb 2014, 10:55
Datenbank: SQLite • Version: ? • Zugriff über: UniDac
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???
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Buddelfish
(Gast)

n/a Beiträge
 
#2

AW: Drag & Drop DBGrid

  Alt 21. Feb 2014, 11:11
Du musst doch nur wissen, ob gerade 'gedragged' wird, oder? Dann führst Du das tracken im OnMouseMove eben nur dann aus.
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Drag & Drop DBGrid

  Alt 21. Feb 2014, 12:06
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;
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 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