![]() |
Probleme mit Drag & Drop und StringGrid
Hallo liebe Delphianer,
ich hab mal wieder ein Gehirnknoten und komme daher mit folgendem Problem zu Euch. Meine Anwendung besteht aus einem Formular mit 2 StringGrids. Das sieht dann optisch so aus: ![]() Mein Ziel ist es, mit Hilfe von Drag & Drop, eine ausgewählte ganze Zeile aus dem rechten StringGrid("Belegungshilfe") in den linken StringGrid zu verschieben. (Siehe Abb. – Roter Pfeil!) Wenn jemand von Euch die Lösung kennt, wäre ich sehr Dankbar. LG Dennis |
Re: Probleme mit Drag & Drop und StringGrid
Hallo Dennis,
nach kurzem Suchen habe ich direkt nachfolgendens von ![]() ![]() |
Re: Probleme mit Drag & Drop und StringGrid
Danke für die schnelle Antwort. Ich habes ausprobiert und es funktioniert leider noch nicht so richtg.
Die Zeile kann ich problemlos innerhalb EINES StringGrid verschieben, aber nicht aus dem einem StringGrid(1) in das andere StrinGrid(2) verschieben. Irgendwie find ich meinen Fehler nicht. |
Re: Probleme mit Drag & Drop und StringGrid
zeig mal bitte deinen bisherigen Code sonst weiß hier keiner wo dein Problem liegen könnte.
|
Re: Probleme mit Drag & Drop und StringGrid
:wall: Ja Sorry wie Hirnlos von mir:
Delphi-Quellcode:
VIELEN DANK
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; StringGrid2: TStringGrid; procedure StringGrid2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure StringGrid2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure StringGrid2DragDrop(Sender, Source: TObject; X, Y: Integer); procedure StringGrid1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure StringGrid1DragDrop(Sender, Source: TObject; X, Y: Integer); procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } FSourceRow: Integer; public { Public-Deklarationen } end; type TStringGridHack = class(TStringGrid) public procedure MoveRow(FromIndex, ToIndex: Longint); end; var Form1: TForm1; implementation {$R *.dfm} procedure TStringGridHack.MoveRow(FromIndex, ToIndex: Integer); begin inherited; end; procedure TForm1.StringGrid1DragDrop(Sender, Source: TObject; X, Y: Integer); var DestCol, DestRow: Integer; begin StringGrid2.MouseToCell(X, Y, DestCol, DestRow); if (FSourceRow <> DestRow) then begin TStringGridHack(Source as TStringGrid).MoveRow(FSourceRow, DestRow); end; end; procedure TForm1.StringGrid1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var Col, Row: Integer; begin (Source as TStringGrid).MouseToCell(X, Y, Col, Row); Accept := (Sender = Source) and (Row > 0); end; procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var SourceCol : Integer; begin (Sender as TStringGrid).MouseToCell(X, Y, SourceCol, FSourceRow); if (FSourceRow > 0) then(Sender as TStringGrid).BeginDrag(False, 4); end; procedure TForm1.StringGrid2DragDrop(Sender, Source: TObject; X, Y: Integer); var DestCol, DestRow: Integer; begin StringGrid1.MouseToCell(X, Y, DestCol, DestRow); if (FSourceRow <> DestRow) then begin TStringGridHack(Source as TStringgrid).MoveRow(FSourceRow, DestRow); end; end; procedure TForm1.StringGrid2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var Col, Row: Integer; begin (Source as TStringGrid).MouseToCell(X, Y, Col, Row); Accept := (Sender = Source) and (Row > 0); end; procedure TForm1.StringGrid2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var SourceCol : Integer; begin (Sender as TStringGrid).MouseToCell(X, Y, SourceCol, FSourceRow); if (FSourceRow > 0) then(Sender as TStringGrid).BeginDrag(False, 4); end; end. Dennis |
Re: Probleme mit Drag & Drop und StringGrid
Weis keiner einen Rat???
lg Dennis |
Re: Probleme mit Drag & Drop und StringGrid
Aslo die Zeile mit
Delphi-Quellcode:
Wird dir immer False liefern, weil Sender das Grid ist selbst ist und Source ist das Grid wovon er ds annehmen soll xD
Accept := (Sender = Source) and (Row > 0);
und Accept muss True geben damit es funkt xD 2. Mit MouseToCell geht das net, da es sich nur auf sich selbst bezieht und net auf die anderen Du musst die erstmal selbst festlegen wenn du DragKind auf dmManual hast, wann er das machen soll, bei dir am besten bei MouseDown
Delphi-Quellcode:
So damit startest du das Drag and Drop
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin StringGrid1.BeginDrag(True); end; end. als nächstes machste bei deinem anderen StringGrid bei DragOver folgendes
Delphi-Quellcode:
Nun machste in Drag and Drop folgendas
procedure TForm1.StringGrid2DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean); begin If Source is TStringGrid then //Nur StringGirds annehmen Accept := True; end;
Delphi-Quellcode:
procedure TForm1.StringGrid2DragDrop(Sender, Source: TObject; X,
Y: Integer); var Cell : TPoint; Row : Integer; begin (Sender as TStringGrid).MouseToCell(X,Y,Cell.X,Cell.Y); Row := (Source as TStringGrid).Row; (Sender as TStringGrid).Rows[Cell.Y].Assign((Source as TStringGrid).Rows[Row]); (Source as TStringGrid).Rows[Row].Clear; end; end. |
Re: Probleme mit Drag & Drop und StringGrid
:hello: 1000 Dank! Es funktioniert.
Danke Dennis |
AW: Probleme mit Drag & Drop und StringGrid
Hallo,
die Lösung von NickelM funktioniert bei mir soweit, jedoch mit einem Problem. Mein Quell-Stringgrid hat nur eine Spalte. Mein Ziel-Stringgrid hat allerdings zwei Spalten. In Spalte 1 des Ziel-Stringgrids ist eine fortlaufende Nummer, die auch nicht verändert werden soll. Ziehe ich nun einen Wert auf Stringgrid2 über eine beliebige Spalte 2 von Stringgrid1 wird immer der Wert der ersten Spalte der jeweiligen Zeile überschrieben (also meine fortlaufende Nummer). Der Wert der 2ten Spalte über dem ich mit dem Mauszeiger bin´, ändert sich nicht. |
AW: Probleme mit Drag & Drop und StringGrid
Ohne es zu testen, müsstest du dann glaub ich die Zuordnungszeile anpassen:
(Sender as TStringGrid).Cells[1,Cell.Y]=(Source as TStringGrid).Cells[0,Row]; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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 by Thomas Breitkreuz