Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Property "Objects" im Stringgrid (https://www.delphipraxis.net/37738-property-objects-im-stringgrid.html)

Hansa 19. Feb 2005 17:39

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.

plautzer 20. Feb 2005 13:14

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:
Tgrid = class(Tstringgrid)
    public

    TableName : string;
  end;
Tzelle = class(tobject)
   private
   nr: integer;
   reihe: integer;
   editiert: boolean;
   end;
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:

Delphi-Quellcode:
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;
und so wird sie deklariert:

Delphi-Quellcode:
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);
Ich alles mit einem Objekt 'tgrid' machen?

Hansa 20. Feb 2005 13:34

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.

plautzer 23. Feb 2005 20:43

Re: Property "Objects" im Stringgrid
 
Hi,

ich habe meine liebe zum array wieder gefunden :mrgreen:

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

Keldorn 23. Feb 2005 20:51

Re: Property "Objects" im Stringgrid
 
Hallo
Delphi-Quellcode:
  for i :=grid[k].FixedCols to grid[k].ColCount -1  do  
    for j := grid[k].FixedRows to grid[k].RowCount -1  do
die rows und cols fangen bei 0 an, die letze ist jeweils Anzahl-1

Mfg Frank

plautzer 23. Feb 2005 21:06

Re: Property "Objects" im Stringgrid
 
Der Fehler bleibt unverändert

Delphi-Quellcode:
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;
Plautzer

Keldorn 23. Feb 2005 21:16

Re: Property "Objects" im Stringgrid
 
Zitat:

while k < grd+1 do
warum jetzt hier +1?

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

plautzer 23. Feb 2005 22:28

Re: Property "Objects" im Stringgrid
 
Zitat:

warum jetzt hier +1?
Angenommen es gibt 3 grids, k wurde anfangs auf 1 gesetzt, also muss die schleife 3mal durchlaufen werden. Wenn also k = 1 und grd = 3, dann wird die schleife nur zweimal durchlaufen, also ist k max 2.

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

PLautzer

Hansa 24. Feb 2005 00:23

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)

Robert_G 24. Feb 2005 00:48

Re: Property "Objects" im Stringgrid
 
Zitat:

Zitat von Hansa
Plautzer, der Weg am Anfang war schon gut. Jetzt kommt ein 2-dimensionales Problem ins Spiel. Ist das wirklich nötig ? 8)

Der Weg war weder am Anfang gut, noch wird er gut werden wenn ihr euch weiter auf diesem Holzweg aufhaltet.
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.
Seite 5 von 6   « Erste     345 6      

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