Autor |
Beitrag |
Bronstein
      
Beiträge: 578
Erhaltene Danke: 1
WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
|
Verfasst: 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:
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 arrNxGrid: array of TNextGrid; public 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 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 
      
Beiträge: 578
Erhaltene Danke: 1
WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
|
Verfasst: Sa 11.08.12 13:52
Ich habs hinbekommen, hier nochmal der komplette Code:
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 arrNxGrid: array of TNextGrid; public 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 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 (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
      
Beiträge: 417
Erhaltene Danke: 2
XP
FPC mit Lazarus
|
Verfasst: 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 
      
Beiträge: 578
Erhaltene Danke: 1
WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
|
Verfasst: 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
      
Beiträge: 417
Erhaltene Danke: 2
XP
FPC mit Lazarus
|
Verfasst: 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.
|
|
|