Hi,
ich habe meine liebe zum array wieder gefunden
das ganze sieht nun so aus:
Delphi-Quellcode:
grid :array[1..20] of tstringgrid;
grd:integer;
procedure TForm1.AddObjectToGrid(ACol, ARow : integer; nr : integer; st_grid:tstringgrid);
begin
zelle := Tzelle.Create;
zelle.nr := nr;
zelle.reihe := arow;
zelle.editiert:=false;
st_grid.Objects[ACol, ARow] := zelle;
end;
grd:=1;
while grd < ibdataset1.RecordCount+1 do
begin
datum1:=ibdataset1.fieldbyname('ablesejahr').AsInteger;
NewTabSheet := TTabSheet.Create(PageControl1);
NewTabSheet.PageControl := PageControl1;
newtabsheet.Caption:= inttostr(grd);
grid[grd]:=tstringgrid.Create(newtabsheet);
grid[grd].Parent := newtabsheet;
//grid[grd].TableName:='grid' + inttostr(datum1);
grid[grd].name:='grid' + inttostr(datum1);
with grid[grd] do
....
k:=0;
While K < ibDataset2.RecordCount do
Begin
grid[grd].RowCount := grid[grd].RowCount +1;
grid[grd].Cells[1,k+1]:=ibdataset2.fieldbyname('ablese_nr').AsString;
grid[grd].Cells[2,k+1]:=ibdataset2.fieldbyname('ablesedatum').AsString;
AddObjectToGrid(1, k+1, ibdataset2.fieldbyname('ablese_nr').AsInteger, grid[grd]);
AddObjectToGrid(2, k+1, ibdataset2.fieldbyname('ablese_nr').AsInteger, grid[grd]);
ibdataset2.Next;
k:=k+1
end;
...
Per keydown wird das objekt zellen.editiert auf true gesetzt und das will ich dann so auslesen:
Delphi-Quellcode:
for k:=1 to grd do
for i :=grid[k].FixedCols to grid[k].ColCount do <--- Hier bringt Delphi die Fehlermeldung
for j := grid[k].FixedRows to grid[k].RowCount do
if zelle.editiert = true then
begin
zelle.editiert:=false;
showmessage(inttostr(zelle.reihe));
end
Wenn ich das jetzt ausführe, und nichts wurde geändert, dann kommt ne Fehlermeldung "Zugriffsverletzung...". Die kommt auch, wenn die Schleife einmal durchlaufen wurde.
Sieht jemand den Grund dafür?
Thx,
Plautzer