AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid leeren

Ein Thema von rajuneon · begonnen am 26. Mär 2009 · letzter Beitrag vom 29. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
rajuneon
(Gast)

n/a Beiträge
 
#1

StringGrid leeren

  Alt 26. Mär 2009, 15:21
Wenn ich mein StringGrid leeren möchte, verwende ich folgende Funktion:

Delphi-Quellcode:
for ireset := 0 to Werte.StringGrid1.RowCount do
    begin
      Werte.StringGrid1.Rows[ireset].Clear();
    end;
Allerdings erhalte ich dann den Fehler, dass die "FOR-Schleifenvariable eine lokale Variable sein" muss.
Was mach ich falsch, bzw. was will Delphi mir damit sagen?
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#2

Re: StringGrid leeren

  Alt 26. Mär 2009, 15:34
machs mal so:

Delphi-Quellcode:
var ireset : integer;
begin
  for i := 0 to stringgrid1.rowcount do
    stringgrid1.cells[0,rowcount] := '';
end;
Marco Tröger
  Mit Zitat antworten Zitat
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#3

Re: StringGrid leeren

  Alt 26. Mär 2009, 15:35
Delphi-Quellcode:
//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;
Vllt hilft das, hab ich gerade gefunden.
  Mit Zitat antworten Zitat
Udo

Registriert seit: 19. Jan 2003
54 Beiträge
 
Delphi 8 Architect
 
#4

Re: StringGrid leeren

  Alt 26. Mär 2009, 16:28
Zitat:
FOR-Schleifenvariable muss eine lokale Variable sein
Was ist denn daran unverständlich?

Falsch:
Delphi-Quellcode:
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;
Richtig:
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;
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

Re: StringGrid leeren

  Alt 26. Mär 2009, 16:52
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?
  Mit Zitat antworten Zitat
joehd

Registriert seit: 8. Okt 2008
Ort: Heidelberg
107 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: StringGrid leeren

  Alt 25. Jun 2009, 17:09
Also ich habe mir ein Funktion geschrieben die egal welches Stringrid löscht und nur die Fixen col und row unbearbeitet bleiben

Delphi-Quellcode:

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;
Der Aufruf erfolgt dann mit

    kbuch1 := form1.StringGridLeer(kbuch1); // Kbuch ist hier das Stringrid Somit kann ich es einfach aufrufen egal welches löschen möchte !

und wie findet Ihr das ?
joe
immer wenn ich was suche finde ich es hier komisch oder ?
Arbeite mit D3 D5 D2007 DXE Prof
  Mit Zitat antworten Zitat
Oreaden

Registriert seit: 10. Nov 2008
60 Beiträge
 
#7

Re: StringGrid leeren

  Alt 26. Jun 2009, 22:46
die götter finden, dass da noch das objekt freigegeben oder zurückgesetzt werden sollte ...

schöne grüsse
Oreaden
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: StringGrid leeren

  Alt 26. Jun 2009, 23:30
Zitat von Satty67:
Es werden zwar die Inhalte gelöscht, aber der einmal reservierte Speicher bleibt weiterhin belegt (bis das StringGrid destroyed wird).
Wie kommst Du darauf?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
joehd

Registriert seit: 8. Okt 2008
Ort: Heidelberg
107 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: StringGrid leeren

  Alt 28. Jun 2009, 22:58
Zitat von Oreaden:
die götter finden, dass da noch das objekt freigegeben oder zurückgesetzt werden sollte ...

schöne grüsse
Oreaden
Warum soll ich es freigeben ? Ich denke eine Speicherbereinigung führt Delphi selbst durch und ich mache doch kein neues Objekt auf ich verweise doch drauf oder ?
Wobei komisch ist natürlich das ich dem Objekt original das bearbeitete zuweisen kann ....

Denkst du oder bist du sicher, das in der Funktion ein neues Objekt erzeugt wird aber warum benötige ich dann keinen Konstruktor ?


Grüße
Joachim
joe
immer wenn ich was suche finde ich es hier komisch oder ?
Arbeite mit D3 D5 D2007 DXE Prof
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

Re: StringGrid leeren

  Alt 29. Jun 2009, 06:23
Zitat von alzaimar:
Zitat von Satty67:
Es werden zwar die Inhalte gelöscht, aber der einmal reservierte Speicher bleibt weiterhin belegt (bis das StringGrid destroyed wird).
Wie kommst Du darauf?
Ich quote mich mal mit, damit der Zusamenhang da ist.

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:08 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