Autor Beitrag
Bronstein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: Sa 11.08.12 12:33 
Hallo,
ich habe zwei NextGrid die ich zur Laufzeit erstelle.

Jetzt möchte ich zum einen, dass man eine ganze Zeile von einem NextGrid zum anderen verschieben kann und zum anderen auch noch einzelne Zeilen innerhalb eines NextGrid verschieben kann.

Das verschieben innerhalb hatte funktioniert durch die Eigenschaften die man im NextGrid einstellen kann.
Jetzt habe ich jedoch die DragDrop Ereignisse belegt, damit man auch zwischen zwei NextGrids Zeilen verschieben kann.
Das funktioniert jetzt, jedoch funktioniert das Verschieben innerhalb des NextGrids nicht mehr.

Was muss ich da machen. Hier mal der Code:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, NxScrollControl, NxCustomGridControl, NxCustomGrid, NxGrid,
  NxColumns, NxColumnClasses;

type
  TForm1 = class(TForm)
    procedure NextGridDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure NextGridDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure NextGridMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    arrNxGrid: array of TNextGrid;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.NextGridDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  Punkt: TPoint;
  Quell_Row, i: Integer;
begin

  if (Source is TNextGrid) and (Sender is TNextGrid) then
  begin
    if (Source as TNextGrid).Name <> (Sender as TNextGrid).name then
    begin
      Punkt.X := X;
      Punkt.Y := Y;

      for i := 0 to (Source as TNextGrid).Columns.Count-1 do
      begin
        if i = 0 then
          (Sender as TNextGrid).AddRow(1);
        (Sender as TNextGrid).Cell[i, (Sender as TNextGrid).LastAddedRow].AsString := (Source as TNextGrid).Cell[i, (Source as TNextGrid).SelectedRow].AsString
      end;
      (Source as TNextGrid).deleteRow((Source as TNextGrid).SelectedRow);
    end
    else
    begin
      //was muss ich hier machen, damit das verschieben der Zeilen innerhalb eines Nextgrid wieder funktioniert
    end;
  end;

end;

procedure TForm1.NextGridDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TNextGrid;
end;

procedure TForm1.NextGridMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  with Sender as TNextGrid do
  begin
    BeginDrag(True);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength(arrNxGrid, 2);
  arrNxGrid[0] := TNextGrid.Create(Form1);
  arrNxGrid[0].Parent := Form1;
  arrNxGrid[0].Options := [goRowMoving, goHeader, goSelectFullRow];
  arrNxGrid[0].OnDragDrop := NextGridDragDrop;
  arrNxGrid[0].OnDragOver := NextGridDragOver;
  arrNxGrid[0].OnMouseDown := NextGridMouseDown;
  arrNxGrid[0].Columns.Add(TNxTextColumn);
  arrNxGrid[0].Columns[arrNxGrid[0].Columns.Count-1].Name := 'S11';
  arrNxGrid[0].Columns[arrNxGrid[0].Columns.Count-1].Header.Caption := 'S1';
  arrNxGrid[0].Columns.Add(TNxTextColumn);
  arrNxGrid[0].Columns[arrNxGrid[0].Columns.Count-1].Name := 'S12';
  arrNxGrid[0].Columns[arrNxGrid[0].Columns.Count-1].Header.Caption := 'S2';
  arrNxGrid[0].Left := 0;
  arrNxGrid[0].Width := 200;
  arrNxGrid[0].Top := 0;
  arrNxGrid[0].Height := 400;

  arrNxGrid[1] := TNextGrid.Create(Form1);
  arrNxGrid[1].Parent := Form1;
  arrNxGrid[1].Options := [goRowMoving, goHeader, goSelectFullRow];
  arrNxGrid[1].OnDragDrop := NextGridDragDrop;
  arrNxGrid[1].OnDragOver := NextGridDragOver;
  arrNxGrid[1].OnMouseDown := NextGridMouseDown;
  arrNxGrid[1].Columns.Add(TNxTextColumn);
  arrNxGrid[1].Columns[arrNxGrid[1].Columns.Count-1].Name := 'S21';
  arrNxGrid[1].Columns[arrNxGrid[1].Columns.Count-1].Header.Caption := 'S1';
  arrNxGrid[1].Columns.Add(TNxTextColumn);
  arrNxGrid[1].Columns[arrNxGrid[1].Columns.Count-1].Name := 'S22';
  arrNxGrid[1].Columns[arrNxGrid[1].Columns.Count-1].Header.Caption := 'S2';
  arrNxGrid[1].Left := 201;
  arrNxGrid[1].Width := 200;
  arrNxGrid[1].Top := 0;
  arrNxGrid[1].Height := 400;

  arrNxGrid[0].AddRow();
  arrNxGrid[0].CellByName[0, arrNxGrid[0].LastAddedRow].AsString := '1';
  arrNxGrid[0].CellByName[1, arrNxGrid[0].LastAddedRow].AsString := 'A';

  arrNxGrid[0].AddRow();
  arrNxGrid[0].CellByName[0, arrNxGrid[0].LastAddedRow].AsString := '2';
  arrNxGrid[0].CellByName[1, arrNxGrid[0].LastAddedRow].AsString := 'B';

end;

end.

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Bronstein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: Sa 11.08.12 13:52 
Ich habs hinbekommen, hier nochmal der komplette Code:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, NxScrollControl, NxCustomGridControl, NxCustomGrid, NxGrid,
  NxColumns, NxColumnClasses;

type
  TForm1 = class(TForm)
    NextGrid1: TNextGrid;
    procedure NextGridDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure NextGridDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure NextGridMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    arrNxGrid: array of TNextGrid;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.NextGridDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  i: Integer;
begin
  if (Source is TNextGrid) and (Sender is TNextGrid) then
  begin
    if (Source as TNextGrid).Name <> (Sender as TNextGrid).name then
    begin
      //Zeile in anderes NextGrid verschieben
      for i := 0 to (Source as TNextGrid).Columns.Count-1 do
      begin
        if i = 0 then
          (Sender as TNextGrid).AddRow(1);
        (Sender as TNextGrid).Cell[i, (Sender as TNextGrid).LastAddedRow].AsString := (Source as TNextGrid).Cell[i, (Source as TNextGrid).SelectedRow].AsString
      end;
      (Source as TNextGrid).deleteRow((Source as TNextGrid).SelectedRow);
    end
    else
    begin
      //Zeile innerhalb des NextGrid verschieben
      (Source as TNextGrid).MoveRow((Source as TNextGrid).SelectedRow, (Source as TNextGrid).GetRowAtPos(X, Y));
      (Source as TNextGrid).selectedRow := (Source as TNextGrid).GetRowAtPos(X, Y);
    end;
  end;
end;

procedure TForm1.NextGridDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TNextGrid;
end;

procedure TForm1.NextGridMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  with Sender as TNextGrid do
  begin
    BeginDrag(True);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength(arrNxGrid, 2);
  arrNxGrid[0] := TNextGrid.Create(Form1);
  arrNxGrid[0].Parent := Form1;
  arrNxGrid[0].Options := [goRowMoving, goHeader, goSelectFullRow];
  arrNxGrid[0].Name := 'NG1';
  arrNxGrid[0].OnDragDrop := NextGridDragDrop;
  arrNxGrid[0].OnDragOver := NextGridDragOver;
  arrNxGrid[0].OnMouseDown := NextGridMouseDown;
  arrNxGrid[0].Columns.Add(TNxTextColumn);
  arrNxGrid[0].Columns[arrNxGrid[0].Columns.Count-1].Name := 'S11';
  arrNxGrid[0].Columns[arrNxGrid[0].Columns.Count-1].Header.Caption := 'S1';
  arrNxGrid[0].Columns.Add(TNxTextColumn);
  arrNxGrid[0].Columns[arrNxGrid[0].Columns.Count-1].Name := 'S12';
  arrNxGrid[0].Columns[arrNxGrid[0].Columns.Count-1].Header.Caption := 'S2';
  arrNxGrid[0].Left := 0;
  arrNxGrid[0].Width := 200;
  arrNxGrid[0].Top := 0;
  arrNxGrid[0].Height := 400;

  arrNxGrid[1] := TNextGrid.Create(Form1);
  arrNxGrid[1].Parent := Form1;
  arrNxGrid[1].Options := [goRowMoving, goHeader, goSelectFullRow];
  arrNxGrid[1].Name := 'NG2';
  arrNxGrid[1].OnDragDrop := NextGridDragDrop;
  arrNxGrid[1].OnDragOver := NextGridDragOver;
  arrNxGrid[1].OnMouseDown := NextGridMouseDown;
  arrNxGrid[1].Columns.Add(TNxTextColumn);
  arrNxGrid[1].Columns[arrNxGrid[1].Columns.Count-1].Name := 'S21';
  arrNxGrid[1].Columns[arrNxGrid[1].Columns.Count-1].Header.Caption := 'S1';
  arrNxGrid[1].Columns.Add(TNxTextColumn);
  arrNxGrid[1].Columns[arrNxGrid[1].Columns.Count-1].Name := 'S22';
  arrNxGrid[1].Columns[arrNxGrid[1].Columns.Count-1].Header.Caption := 'S2';
  arrNxGrid[1].Left := 201;
  arrNxGrid[1].Width := 200;
  arrNxGrid[1].Top := 0;
  arrNxGrid[1].Height := 400;

  arrNxGrid[0].AddRow();
  arrNxGrid[0].CellByName[0, arrNxGrid[0].LastAddedRow].AsString := '1';
  arrNxGrid[0].CellByName[1, arrNxGrid[0].LastAddedRow].AsString := 'A';

  arrNxGrid[0].AddRow();
  arrNxGrid[0].CellByName[0, arrNxGrid[0].LastAddedRow].AsString := '2';
  arrNxGrid[0].CellByName[1, arrNxGrid[0].LastAddedRow].AsString := 'B';

  arrNxGrid[0].AddRow();
  arrNxGrid[0].CellByName[0, arrNxGrid[0].LastAddedRow].AsString := '3';
  arrNxGrid[0].CellByName[1, arrNxGrid[0].LastAddedRow].AsString := 'C';

  arrNxGrid[0].AddRow();
  arrNxGrid[0].CellByName[0, arrNxGrid[0].LastAddedRow].AsString := '4';
  arrNxGrid[0].CellByName[1, arrNxGrid[0].LastAddedRow].AsString := 'D';

end;

end.

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
rizla
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: So 12.08.12 06:34 
Hi!
Danke für den Hinweis / Code!
Gibt es einen Grund dafür, daß Du das Grid im OnCreate erzeugst / beschriftest / definierst?

Beste Grüße

r!a

_________________
if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.
Bronstein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: So 12.08.12 13:00 
Hallo,
ja den gibt es, da ich soviel Grids erzeuge wie wir Maschinen in unserer Fetigung haben.

Es handelt sich hier nur um ein Testprojekt wo ich die Funktionen des NextGrid testen wollte, später gibt das ganze eine abgespeckte Version eines PPS.

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
rizla
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: So 12.08.12 23:42 
Hi!
Achso. Klingt nach viel Schreibarbeit ;)
Na dann, viel Erfolg und danke nochmal - vllt brauch ichs irgendwann mal.

_________________
if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.