![]() |
Drag and Drop im TDBGrid
Hi,
ich würde gern in meinen TDBGrids 'drag and drop' verwenden, und so neue Datensätze in einer Tabelle anlegen. Leider habe ich mit den folgenden Versuchen keinen Erfolg:
Delphi-Quellcode:
Leider funktioniert der Vorgang nur, wenn ich den in einem freien Bereich des Grid mit dem D&D beginne. Ich möchte aber auf einem der Datensätze beginnen, so dass dieser der aktuelle Datensatz wird und ich diesen dann beim D&D verwenden kann. Wie kann ich dies realisieren? Kann jemand helfen?
// Drag beginnen
procedure TForm_Main.DBGrid_MasterMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button =mbleft then DBGrid_Master.BeginDrag(false); end; // Drag and Drop akzeptieren? procedure TForm_Main.DBGrid_DetailDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if Source is TDBGrid then begin accept:= true; end; end; // Erfolgreicher Drag-and-Drop-Vorgang procedure TForm_Main.DBGrid_DetailDragDrop(Sender, Source: TObject; X, Y: Integer); begin if Source is TDBGrid then begin showmessage('Dragdrop'); end; end; // Fehlschlag procedure TForm_Main.DBGrid_DetailEndDrag(Sender, Target: TObject; X, Y: Integer); begin if Target= NIL then MessageBeep(0); end; Gruß, Barnti |
Re: Drag and Drop im TDBGrid
Wenn ich mich recht erinnere, verhinderte ein Bug im TDBGrid das erfolgreiche Drag-and-Droppen. Wir haben das mit einer leicht modifizierten Version des TDBGrid gelöst:
Delphi-Quellcode:
unit FDDDBGrid;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids; type TDDDBGrid = class(TDBGrid) private { Private declarations } FOnMouseDown: TMouseEvent; protected { Protected declarations } procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; published { Published declarations } property Row; property OnMouseDown read FOnMouseDown write FOnMouseDown; end; procedure Register; implementation procedure TDDDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnMouseDown) then FOnMouseDown(Self, Button, Shift, X, Y); inherited MouseDown(Button, Shift, X, Y); end; procedure Register; begin RegisterComponents('DBGrid', [TDDDBGrid]); end; end. |
Re: Drag and Drop im TDBGrid
Hallo HolyCow,
kannst Du Deine Lösung vielleicht ein wenig mit Kommentaren versehen. Ich komme so damit nicht ganz klar! Bitte Erläutere die Vorgehensweise um die Anpassungen vorzunehmen. Danke vielmals, Gruß, Barnti |
Re: Drag and Drop im TDBGrid
Zitat:
Das TDDDBGrid installieren und statt dem TDBGrid verwenden, dann sollte es klappen. |
Re: Drag and Drop im TDBGrid
Hi,
ich habe den Hinweis auf der Borland-Seite gefunden. Da ich aber einen anderen Workarround gefunden habe belasse ich es dabei. Meine Lösung:
Delphi-Quellcode:
Das OnColEnter initiiert den D&D-Vorgang, wenn das OnColEnter durch MouseKlick ausgelöst wurde. Ansonsten wird das Ereignis 'ignoriert'.
procedure TForm_Main.DBGridColEnter(Sender: TObject);
var mousedown: Smallint; begin if down then // Globale Variable, die bei der Navigation im Grid aus false gesetzt wird begin DBGrid_Master.BeginDrag(false); end; down:= true; // Rücksetzen der Variable end; Danke für Deine Bemühungen. Es läuft jetzt erstmal. Zwar mit globaler Variable aber das ist die erste. Außerdem gibt es sicherlich noch einen anderen Weg ohne diese Variable. Später... Gruß, Barnti |
Re: Drag and Drop im TDBGrid
Hallo,
das Thema ist zwar schon älter, aber ich habe gerade das selbe Problem. Ich habe ein DBGrid und würde gerne die Reihen per Drap'n Drop im selben DBGrid vertauschen und anschließend per SQL speichern. Ist das überhaupt mit den Standardkomponenten machbar? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 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