Einzelnen Beitrag anzeigen

Cordt

Registriert seit: 10. Jan 2013
32 Beiträge
 
#1

2 StringGrids, Drag&Drop sperrt Row

  Alt 9. Mär 2022, 10:22
Hallo miteinander,

ich nutze 2 StingGrids, welche jeweils ganze Zeilen in sich und auch gegenseitig per Drag&Drop annehmen können, bzw gegenseitig austauschen.
Zum Beispiel schiebe ich Zeile 1 aus SG1 in Zeile 3 von SG2, während zeitgleich dann der Inhalt von Zeile 3 von SG2 in Zeile 1 von SG1 auftaucht. Soweit so einfach.
Wenn ich _danach_ aber eine beliebige Zeile von SG2 auf Zeile 1 von SG1 schiebe, bekomm ich den NoDrop Curser und kann es nicht loslassen.
Allgemein kann ich auf die Stelle von der ich vorher etwas gedragt habe von dem anderen Grid nichts mehr Dropen, bis ich nochmal irgend etwas anderes im Ziel Grid gedragt habe. Aber immer ist die zuletzt gedragte Zeile gesperrt.

Ich bekomms gerade nicht hin, diese letzte Drag-Quelle zu entfernen, damit ich da auch wieder was ablegen kann... Hat mal wer ein Brecheisen, um mir das Brett vorm Kopf zu entfernen bitte?


Delphi-Quellcode:
//Die Prozeduren sind in beiden Stringgrids hinterlegt
//DragMode = DmManual
//DragKind = dkDrag
//keine fixed Rows

procedure TFormKampf.SGGegenstände1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  CurrentCol, CurrentRow: integer;
begin
  TStringgrid(Sender).SetFocus;
  TStringgrid(Sender).MouseToCell(X, Y, gSourceCol, gSourceRow); //gSourceRow = Globale IntegerVariable
  gDragDropAnzahl := TStringGrid(Sender).Cells[0, gSourceRow];
  gDragDropItem := TStringGrid(Sender).Cells[1, gSourceRow];
  gDragDropGewicht := TStringGrid(Sender).Cells[2, gSourceRow];
  TStringgrid(Sender).BeginDrag(true, 4);
end;

procedure TFormKampf.SGGegenstände1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var
  CurrentCol, CurrentRow: integer;
begin
  TStringGrid(Sender).MouseToCell(X, Y, CurrentCol, CurrentRow);
  Accept := (Source IS TStringgrid) and (CurrentCol >= 0) and (CurrentCol >= 0); //Versuch jede Koordinate zu erlauben
end;

procedure TFormKampf.SGGegenstände1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  DestCol, DestRow: Integer;
begin
  TStringGrid(Sender).MouseToCell(X, Y, DestCol, DestRow);
  TStringGrid(Source).Cells[0, gSourceRow] := TStringGrid(Sender).Cells[0, DestRow];
  TStringGrid(Source).Cells[1, gSourceRow] := TStringGrid(Sender).Cells[1, DestRow];
  TStringGrid(Source).Cells[2, gSourceRow] := TStringGrid(Sender).Cells[2, DestRow];

  TStringGrid(Sender).Cells[0, DestRow] := gDragDropAnzahl;
  TStringGrid(Sender).Cells[1, DestRow] := gDragDropItem;
  TStringGrid(Sender).Cells[2, DestRow] := gDragDropGewicht;
end;
  Mit Zitat antworten Zitat