AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein 2 StringGrids, Drag&Drop sperrt Row
Thema durchsuchen
Ansicht
Themen-Optionen

2 StringGrids, Drag&Drop sperrt Row

Ein Thema von Cordt · begonnen am 9. Mär 2022 · letzter Beitrag vom 15. Mär 2022
Antwort Antwort
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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.431 Beiträge
 
Delphi 12 Athens
 
#2

AW: 2 StringGrids, Drag&Drop sperrt Row

  Alt 9. Mär 2022, 10:30
Deine Zuweisung zu Accept hat einen Copy-Paste Fehler, aber ich glaube nicht, dass das die Ursache ist.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Cordt

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

AW: 2 StringGrids, Drag&Drop sperrt Row

  Alt 9. Mär 2022, 10:57
Danke für die schnelle Antwort.
Du hast absolut recht, das ist nicht die Ursache. Denn auch ganz ohne die Row/Col >=0 Klausel hat es vorher schon nicht funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.431 Beiträge
 
Delphi 12 Athens
 
#4

AW: 2 StringGrids, Drag&Drop sperrt Row

  Alt 9. Mär 2022, 12:23
Kannst du das auf ein minimales Beispielprojekt reduzieren?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Cordt

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

AW: 2 StringGrids, Drag&Drop sperrt Row

  Alt 9. Mär 2022, 13:02
Das Projekt hat sich tadellos verhalten, bis ich stückweise alle properties gesetzt hatte und zur Einstellung in den Options des StringGrids "goAlwaysShowEditor" kam, welche ich true habe, um die lästuge blaue Selection weg zu bekommen, wenn das SG nicht im Fokus ist.
Ohne diese Einstellung sieht es wieder unschön aus, aber ich kann wieder überall hin dropen
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
221 Beiträge
 
#6

AW: 2 StringGrids, Drag&Drop sperrt Row

  Alt 9. Mär 2022, 17:14
Es ist aber jetzt nicht so einfach, dass das EndDrag fehlt, oder?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.431 Beiträge
 
Delphi 12 Athens
 
#7

AW: 2 StringGrids, Drag&Drop sperrt Row

  Alt 9. Mär 2022, 17:58
Es ist aber jetzt nicht so einfach, dass das EndDrag fehlt, oder?
Dann müsste man ja auch wissen, was man da reinschreiben will.

Aber man könnte bei OnStartDrag/OnEndDrag ganz einfach die besagte Option temporär ausschalten. Dann hätte man allerdings auch wieder das blaue Selection-Rechteck während des Drag-Vorgangs. Ich habe jetzt nur gerade keine Zeit das in einem minimalen Beispielprojekt auszuprobieren...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Cordt

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

AW: 2 StringGrids, Drag&Drop sperrt Row

  Alt 15. Mär 2022, 23:48
das habe ich mir auch gedacht, nur geklappt hat mein Versuch nicht
Allerdings bin ich unsicher, ob ich die Einstellung in der Optionen-Property richtig gesetzt habe.
Gelesen habe ich, dass man das mit nem Sg.options := sg.options + 'goAlwaysShowEditor' macht. Andersherum hab ichs dann entsprechend mit - versucht.
Aber ich konnte keinerlei Effekt davon feststellen. Wie gesagt, vermutlich hab ichs falsch gemacht.

Lg
  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 10:35 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