![]() |
StringGrid leeren
Wenn ich mein StringGrid leeren möchte, verwende ich folgende Funktion:
Delphi-Quellcode:
Allerdings erhalte ich dann den Fehler, dass die "FOR-Schleifenvariable eine lokale Variable sein" muss.
for ireset := 0 to Werte.StringGrid1.RowCount do
begin Werte.StringGrid1.Rows[ireset].Clear(); end; Was mach ich falsch, bzw. was will Delphi mir damit sagen? |
Re: StringGrid leeren
machs mal so:
Delphi-Quellcode:
var ireset : integer;
begin for i := 0 to stringgrid1.rowcount do stringgrid1.cells[0,rowcount] := ''; end; |
Re: StringGrid leeren
Delphi-Quellcode:
Vllt hilft das, hab ich gerade gefunden.
//alle Zellen leeren und auf eine Leerzeile beschränken
for i := Pred(StringGrid1.RowCount) downto StringGrid1.FixedRows do StringGrid1.Rows[i].Clear; StringGrid1.RowCount := StringGrid1.FixedRows + 1; |
Re: StringGrid leeren
Zitat:
Falsch:
Delphi-Quellcode:
Richtig:
var
Werte: TWerte; ireset: integer; implementation {$R *.dfm} procedure TWerte.Button1Click(Sender: TObject); begin for ireset := 0 to Werte.StringGrid1.RowCount do begin Werte.StringGrid1.Rows[ireset].Clear; end; end;
Delphi-Quellcode:
var
Werte: TWerte; implementation {$R *.dfm} procedure TWerte.Button1Click(Sender: TObject); var ireset: integer; //!!!!!!!!!!!!!!!!! begin for ireset := 0 to Werte.StringGrid1.RowCount do begin Werte.StringGrid1.Rows[ireset].Clear; end; end; |
Re: StringGrid leeren
Also ich würde ja die Spalten löschen, also Cols[i].Clear. Denn in den meisten Fällen gibt das weniger Schleifendurchläufe.
Was mich aber brennend interessiert: Es werden zwar die Inhalte gelöscht, aber der einmal reservierte Speicher bleibt weiterhin belegt (bis das StringGrid destroyed wird). Da die Spalten wohl einfach String-Listen sind, wundert mich das verhalten, denn TStringList gibt bei Clear auch den Speicher wieder frei. Gibt es eine Möglichkeit, das StringGrid (ohne .Free) dazu zu bewegen, den nicht mehr benötigten Speicher frei zu geben? |
Re: StringGrid leeren
Also ich habe mir ein Funktion geschrieben die egal welches Stringrid löscht und nur die Fixen col und row unbearbeitet bleiben
Delphi-Quellcode:
Der Aufruf erfolgt dann mit function TForm1.StringGridLeer(genstrgrid:Tstringgrid):tstringgrid; var i,j :integer; begin for i := genstrgrid.FixedCols to genstrgrid.ColCount - 1 do begin for j := genstrgrid.FixedRows to genstrgrid.RowCount - 1 do begin genstrgrid.Cells[i,j] := ''; end; end; genstrgrid.rowCount := genstrgrid.Fixedrows + 2; result := genstrgrid; // wieder zurückgeben end;
Delphi-Quellcode:
Somit kann ich es einfach aufrufen egal welches löschen möchte !
kbuch1 := form1.StringGridLeer(kbuch1); // Kbuch ist hier das Stringrid
und wie findet Ihr das ? |
Re: StringGrid leeren
die götter finden, dass da noch das objekt freigegeben oder zurückgesetzt werden sollte ...
schöne grüsse Oreaden |
Re: StringGrid leeren
Zitat:
|
Re: StringGrid leeren
Zitat:
Wobei komisch ist natürlich das ich dem Objekt original das bearbeitete zuweisen kann .... :gruebel: Denkst du oder bist du sicher, das in der Funktion ein neues Objekt erzeugt wird aber warum benötige ich dann keinen Konstruktor ? :roll: Grüße Joachim |
Re: StringGrid leeren
Zitat:
Also ist ja schon 3 Monate her, aber denke das ich den Speicherbedarf der Anwendung per Taskmanager überwacht hatte. Es ging wohl um ein großes StringGrid mit über 100 MByte Speicherbedarf (Demo von TSimpleTable). Trotz Clearance und runtersetzen von RowCount blieb der Speicher (laut Taskmanager belegt). Ob das eine zuverlssige Information war, bin ich mir inzw. nicht mehr sicher. Aber das Grid wird ja jetzt in einer Art Paging-Mode va DrawCell angezeigt (also nahezu kein Speicherbedarf), weshalb ich das nicht weiter verfolgt hatte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz