Delphi-PRAXiS

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 Anfängerfrage, TStringGrid - Rows[Row] (https://www.delphipraxis.net/85363-anfaengerfrage-tstringgrid-rows%5Brow%5D.html)

MaGe 29. Jan 2007 20:35


Anfängerfrage, TStringGrid - Rows[Row]
 
Moin, moin,

ich versuche gerade mein Wissen zu erweitern und wie ich im Forum schon gesehen habe ist wohl das StringGrid ein leidiges Thema. :zwinker:
Dachte ich mir also ran an den Speck und frimmelte gestern und heute Abend dran rum, mein tolles Delphi7-Buch (von W.Doberenz&T.Kowalski) hatte mir auch verraten dass man mit:
"Rows[i] ... Zugriff auf den Inhalt einr kompletten Zeile"
erhält. Weiter fand ich mit der Offlinehilfe folgendes:
Delphi-Quellcode:
property Rows[Index: Integer]: TStrings;
Somit bekomme ich wohl eine Liste von TStrings, zumindest verstehe ich das so. Damit müsste ich also mit:
Delphi-Quellcode:
MeineTStringListe := TStringList.Create;
MeineTStringListe := Rows[Row]; // Übergabe an MeineTStringliste
.. do something ...
MeineTStringListe.free;
doch die Stringliste von Rows an MeineTStringListe übergeben oder nicht?
Somit könnte ich zum auslesen der Zeile, die ganze Zeile als StringListe geben lassen und mich dann drauf stürzen wie ich auf einzelne Elemente einer TStringListe zugreife.
Kann mir einer vielleicht erklären wo ich meinen Gedankenfehler habe?

Gruß

Ma.Ge

Nils_13 29. Jan 2007 20:41

Re: Anfängerfrage, TStringGrid - Rows[Row]
 
Vielleicht eine Schleife nehmen und alle Zeilen einzeln übergeben ?

MaGe 29. Jan 2007 20:46

Re: Anfängerfrage, TStringGrid - Rows[Row]
 
Geht das nicht eleganter anstatt mit einer Schleife alles mühsam durch zugehen?
Kann nicht der Inhalt von Objekt A an B zugewiesen werden?

Gruß

Ma.Ge

SaFu 29. Jan 2007 21:16

Re: Anfängerfrage, TStringGrid - Rows[Row]
 
Hiermit kannst du du alle Spalten und Zeilen an die StringList überegeben

Delphi-Quellcode:
Vertrpl:= TStringlist.Create;  // Stringliste erzeugen
    Vertrpl.Add(IntToStr(StringGrid1.Colcount));
    Vertrpl.Add(IntToStr(StringGrid1.Rowcount));
      for x:= 0 to StringGrid1.ColCount-1 do
        for y:= 0 to StringGrid1.RowCount-1 do
        Vertrpl.Add(StringGrid1.Cells[x,y]);

      for x:= 0 to StringGrid1.ColCount-1 do
        Vertrpl.Add(IntToStr(StringGrid1.ColWidths[x]));
          for x:= 0 to StringGrid1.RowCount-1 do
          Vertrpl.Add(IntToStr(StringGrid1.RowHeights[x]));
          Vertrpl.Add(IntToStr(StringGrid1.Clientwidth));
          Vertrpl.Add(IntToStr(StringGrid1.Clientheight));
          Vertrpl.Add(IntToStr(Ord(StringGrid1.ScrollBars)));

marabu 30. Jan 2007 12:22

Re: Anfängerfrage, TStringGrid - Rows[Row]
 
Hi,

be careful with that axe, Eugene Ma.

Zitat:

Zitat von MaGe
Somit bekomme ich wohl eine Liste von TStrings, zumindest verstehe ich das so. Damit müsste ich also mit:
Delphi-Quellcode:
MeineTStringListe := TStringList.Create;
MeineTStringListe := Rows[Row]; // Übergabe an MeineTStringliste
.. do something ...
MeineTStringListe.free;
doch die Stringliste von Rows an MeineTStringListe übergeben oder nicht?

Du erhältst einen Zeiger auf die Row, den du natürlich in einer beliebigen Zeiger-Variable ablegen kannst, aber du darfst nicht einfach Objekte freigeben, welche du nie erzeugt hast.

Delphi-Quellcode:
var
  sl: TStrings;
begin
  // Referenz übernehmen
  with StringGrid do
  begin
    Cells[Col, Row] := 'Hokus';
    sl := Rows[Row];
    Cells[Col, Row] := 'Pokus';
    ShowMessage(sl[Col]);
  end;
 
  // Daten übernehmen
  with StringGrid do
  begin
    sl := TStringList.Create;
    Cells[Col, Row] := 'Hokus';
    sl.Assign(Rows[Row]);
    Cells[Col, Row] := 'Pokus';
    ShowMessage(sl[Col]);
    sl.Free;
  end;
end;
Grüße vom marabu

MaGe 30. Jan 2007 17:33

Re: Anfängerfrage, TStringGrid - Rows[Row]
 
Zitat:

Zitat von marabu
Delphi-Quellcode:
var
  sl: TStrings;
begin
  // Referenz übernehmen
  with StringGrid do
  begin
    Cells[Col, Row] := 'Hokus';
    sl := Rows[Row];
    Cells[Col, Row] := 'Pokus';
    ShowMessage(sl[Col]);
  end;
 
  // Daten übernehmen
  with StringGrid do
  begin
    sl := TStringList.Create;
    Cells[Col, Row] := 'Hokus';
    sl.Assign(Rows[Row]);
    Cells[Col, Row] := 'Pokus';
    ShowMessage(sl[Col]);
    sl.Free;
  end;
end;
Grüße vom marabu

Das ist die Antwort die ich erhoft hatte! Vielen Dank Marabu, Du bist mein "Hero of the Day!" :cheers:
Wenn ich das Richtig verstehe, kann man mit Referenzübernahme den Inhalt der Row gleich ändern ohne diesen wieder an der Stelle zurückschreiben zu müssen?
Wenn ja, wäre das ja praktisch, ich würde die 'Orginaldaten' sozusagent dirket verändern ohne, eine procedure zu schreiben die die veränderten Daten an der Stelle der Orginaldaten schreibt.
Wenn ich das jetzt richtig verstanden habe macht OOP ja richtig Spass :dp:

Gruß

Ma.Ge


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 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