AGB  ·  Datenschutz  ·  Impressum  







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

Probleme mit Drag & Drop und StringGrid

Offene Frage von "dravigi"
Ein Thema von Dennis_Wolfram · begonnen am 15. Aug 2009 · letzter Beitrag vom 22. Jul 2013
Antwort Antwort
Seite 1 von 2  1 2      
Dennis_Wolfram

Registriert seit: 8. Dez 2007
Ort: Berlin & Augsburg
29 Beiträge
 
Delphi 2010 Enterprise
 
#1

Probleme mit Drag & Drop und StringGrid

  Alt 15. Aug 2009, 14:36
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:

http://9qaqaa.bay.livefilestore.com/...k/DragDrop.jpg

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
Dennis Wolfram
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Probleme mit Drag & Drop und StringGrid

  Alt 15. Aug 2009, 15:11
Hallo Dennis,

nach kurzem Suchen habe ich direkt nachfolgendens von toms hier gefunden:
Drag&Drop für StringGrid
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Dennis_Wolfram

Registriert seit: 8. Dez 2007
Ort: Berlin & Augsburg
29 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Probleme mit Drag & Drop und StringGrid

  Alt 15. Aug 2009, 16:21
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.
Dennis Wolfram
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Probleme mit Drag & Drop und StringGrid

  Alt 15. Aug 2009, 16:30
zeig mal bitte deinen bisherigen Code sonst weiß hier keiner wo dein Problem liegen könnte.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Dennis_Wolfram

Registriert seit: 8. Dez 2007
Ort: Berlin & Augsburg
29 Beiträge
 
Delphi 2010 Enterprise
 
#5

Re: Probleme mit Drag & Drop und StringGrid

  Alt 15. Aug 2009, 16:40
Ja Sorry wie Hirnlos von mir:

Delphi-Quellcode:
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.
VIELEN DANK

Dennis
Dennis Wolfram
  Mit Zitat antworten Zitat
Dennis_Wolfram

Registriert seit: 8. Dez 2007
Ort: Berlin & Augsburg
29 Beiträge
 
Delphi 2010 Enterprise
 
#6

Re: Probleme mit Drag & Drop und StringGrid

  Alt 21. Aug 2009, 20:59
Weis keiner einen Rat???

lg Dennis
Dennis Wolfram
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Probleme mit Drag & Drop und StringGrid

  Alt 22. Aug 2009, 00:26
Aslo die Zeile mit
Accept := (Sender = Source) and (Row > 0); Wird dir immer False liefern, weil Sender das Grid ist selbst ist und Source ist das Grid wovon er ds annehmen soll xD
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:
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
StringGrid1.BeginDrag(True);
end;

end.
So damit startest du das Drag and Drop
als nächstes machste bei deinem anderen StringGrid bei DragOver folgendes
Delphi-Quellcode:
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;
Nun machste in Drag and Drop folgendas
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.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Dennis_Wolfram

Registriert seit: 8. Dez 2007
Ort: Berlin & Augsburg
29 Beiträge
 
Delphi 2010 Enterprise
 
#8

Re: Probleme mit Drag & Drop und StringGrid

  Alt 22. Aug 2009, 04:43
1000 Dank! Es funktioniert.

Danke Dennis
Dennis Wolfram
  Mit Zitat antworten Zitat
dravigi

Registriert seit: 18. Jul 2013
7 Beiträge
 
#9

AW: Probleme mit Drag & Drop und StringGrid

  Alt 19. Jul 2013, 14:25
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.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#10

AW: Probleme mit Drag & Drop und StringGrid

  Alt 19. Jul 2013, 14:42
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];
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:45 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