Re: Property "Objects" im Stringgrid
Und eine Zeile bestht aus ColCount Zellen. Gehe die doch einfach durch mit Schleife. Ein StringGrid besteht eben aus Zellen und nicht aus Zeilen.
|
Re: Property "Objects" im Stringgrid
Hi,
ich habe nochmal ein paar um zu vergewissen das ich auf dem richtigen weg bin. Meine erste Frage hierzu:
Delphi-Quellcode:
Ist das sinnvoll zwei objekte für das stringgrid zu wählen? Denn ich merk gerade das ich probleme habe, das grids nach dem zellenobjekt zu druchforsten:
Tgrid = class(Tstringgrid)
public TableName : string; end; Tzelle = class(tobject) private nr: integer; reihe: integer; editiert: boolean; end;
Delphi-Quellcode:
und so wird sie deklariert:
for i := st_grid.FixedCols to st_grid.ColCount do
for j := st_grid.FixedRows to st_grid.RowCount do if zelle.editiert = true then begin //prüfen ob die zelle editiert wurde showmessage(inttostr(zelle.reihe)); end;
Delphi-Quellcode:
Ich alles mit einem Objekt 'tgrid' machen?
procedure TForm1.zellenchange(ACol, ARow : integer;sgNr:tgrid ;editiert:boolean);
begin if sgNr.Objects[ACol, ARow] <> nil then (sgNr.Objects[ACol, ARow] as Tzelle).editiert := editiert; end; ... x:=(Sender as Tstringgrid).Col; y:=(Sender as Tstringgrid).row; zellenchange(x,y,Sender as Tgrid,true); |
Re: Property "Objects" im Stringgrid
Ich habe ca. 20-40 Grids und komme mit 2 Objects aus. Eines für Eingabe und das andere für Ausgabe-Operationen. Vielleicht täusche ich mich, aber irgendwie sehe ich da zu viele "AS". Vermutlich bist du mit Tablename noch nicht so ganz einig. Packe den Namen doch notfalls auch noch in die Objects direkt mit rein.
|
Re: Property "Objects" im Stringgrid
Hi,
ich habe meine liebe zum array wieder gefunden :mrgreen: das ganze sieht nun so aus:
Delphi-Quellcode:
Per keydown wird das objekt zellen.editiert auf true gesetzt und das will ich dann so auslesen:
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; ...
Delphi-Quellcode:
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.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 Sieht jemand den Grund dafür? Thx, Plautzer |
Re: Property "Objects" im Stringgrid
Hallo
Delphi-Quellcode:
die rows und cols fangen bei 0 an, die letze ist jeweils Anzahl-1
for i :=grid[k].FixedCols to grid[k].ColCount -1 do
for j := grid[k].FixedRows to grid[k].RowCount -1 do Mfg Frank |
Re: Property "Objects" im Stringgrid
Der Fehler bleibt unverändert
Delphi-Quellcode:
Plautzer
k:=1;
while k < grd+1 do begin for i :=grid[k].FixedCols to grid[k].ColCount-1 do for j := grid[k].FixedRows to grid[k].RowCount-1 do if zelle.editiert = true then begin zelle.editiert:=false; showmessage(inttostr(zelle.reihe)); end; k:=k+1; enD; |
Re: Property "Objects" im Stringgrid
Zitat:
dein grid-array ist statisch. Das fängt und endet dort, wie du es definierst [1 bis 20] oder auch [99 bis 101]. cols und rows sind dynamisch, die beginnen bei 0. Mfg Frank |
Re: Property "Objects" im Stringgrid
Zitat:
Delphi-Quellcode:
heißt das, dass grd immer bis 20 durchlaufen wird? Ich habe aber angenommen nur 1..3 von den 1..20 benutzt, kann man das irgentwie einschränken?
Das fängt und endet dort, wie du es definierst [1 bis 20] oder auch [99 bis 101]. cols und rows sind dynamisch, die beginnen bei 0.
PLautzer |
Re: Property "Objects" im Stringgrid
Plautzer, der Weg am Anfang war schon gut. Jetzt kommt ein 2-dimensionales Problem ins Spiel. Ist das wirklich nötig ? 8)
|
Re: Property "Objects" im Stringgrid
Zitat:
Objects ist, genau wie Tag, nur eine Art Hilfe für Quick'nDirty-Lösungen. Wenn es mal husch-husch gehen muss. Da ihr jetzt schon mehrere Tage damit verbringt kann man Quick rausstreichen. ;) Ihr scheint nicht sehr vetraut mit OOP zu sein. (ist nicht böse gemeint ;) ) Doch selbst mit wenig Erfahrung in objektorientierter Programmierung solltet ihr in wenigen Stunden eine eigene Grid-Ableitung hinbekommen können. Eine in der man sein Formular nicht mit unnötigen Code vollstopfen muss. http://www.delphipraxis.net/internal...=301978#301978 Sowas hat einfach rein gar nichts in einem Formular zu suchen, das kann man doch sonst nie wiederverwenden, geschweige denn lesen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 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