AGB  ·  Datenschutz  ·  Impressum  







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

Stringgrid Zeilen füllen

Ein Thema von Ego · begonnen am 1. Dez 2012 · letzter Beitrag vom 3. Dez 2012
Antwort Antwort
Seite 2 von 2     12   
Ego

Registriert seit: 8. Feb 2007
8 Beiträge
 
#11

AW: Stringgrid Zeilen füllen

  Alt 2. Dez 2012, 20:57
@hoika:
Nein, ich halte es nicht für sinnvoll, zweimal das Array zu durchlaufen. Ist nicht gerade optimal. Jedesmal rowcount um einen erhöhen, wenn es gebraucht wird, klappt besser.
Das gemeine an der Sache ist, daß bei mir in den Probläufen mit der ersten Methode alles klappte, als ich immer nur relativ kurze Arrays mit ca. 10 bis 20 Komponenten benutzte(rowcount wird also 'automatisch' erhöht (bzw. ist vorgegeben) bis wohl 50.)
Deswegen nahm ich an, daß es immer gehen würde. Dann, im Ernstfall mit langen Arrays (> 200) klappte es eben nicht mehr, bei ca. 50 Einträgen war Schluß. Ein ganz böse Falle! Sinnvoller wäre es, wenn bei meiner ersten Methode eine - und nur ein - Zeile gefüllt würde. Dann wüßte man gleich Bescheid.

Recht hast du mit deinem zweiten Eintrag. Das ist auch so eine üble Sache beim Stringgrid, auf die ich schon mal reingefallen bin.

@ helmi:
Danke für den Hinweis, sehr interessant!
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Stringgrid Zeilen füllen

  Alt 2. Dez 2012, 21:00
setz halt RowCount := high(xyarray) + FixRows Dann braucht das Array nur einmal durchlaufen
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi ( 2. Dez 2012 um 21:02 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Stringgrid Zeilen füllen

  Alt 3. Dez 2012, 06:03
Hallo,

auch ein guter Ansatz von helmi,
da hier ja die maximale Anzahl bekannt ist.
Dann noch mit BeginUpdate/EndUpdate arbeiten,
und der User bekommt vom Füllen nix mit.

Heiko
Heiko
  Mit Zitat antworten Zitat
Ego

Registriert seit: 8. Feb 2007
8 Beiträge
 
#14

AW: Stringgrid Zeilen füllen

  Alt 3. Dez 2012, 08:10
setz halt RowCount := high(xyarray) + FixRows Dann braucht das Array nur einmal durchlaufen
Nein, das ist Platzverschwendung; z.B. Array > 200 und nur 15 Einträge werden gebraucht, da mache ich doch kein riesengroßes Stringgrid!

Das, was ich als zweite Methode angegeben habe, ist schon optimal. Mein Problem ist ja nicht: 'Wie mache ich das?' sondern: 'Wieso verhält sich Stringgrid so tückisch, daß Methode 1 teilweise (aber eben nur teilweise!) funktioniert?'
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#15

AW: Stringgrid Zeilen füllen

  Alt 3. Dez 2012, 08:40
Dann zähl halt die notwendigen Zeilen mit

(Pseudocode weil mir grad mein Delphi fehlt)

Delphi-Quellcode:
RowCount := high(xyarray) + FixRows;

j := 0;
for i := low(xyarray) to high(xyarray) do
  begin
    If xyarray[i] = 'textthen
      begin
        inc(j);
        MitIrgendEinerProcedureDasStringGridBefüllen; //hier das Grid befüllen, in der Zeile "j"
      end;
  end;

RowCount := j + FixRows;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#16

AW: Stringgrid Zeilen füllen

  Alt 3. Dez 2012, 09:18
setz halt RowCount := high(xyarray) + FixRows Dann braucht das Array nur einmal durchlaufen
Nein, das ist Platzverschwendung; z.B. Array > 200 und nur 15 Einträge werden gebraucht, da mache ich doch kein riesengroßes Stringgrid!
Das ist keine Platzverschwendung, Stringvariablen sind im Delphi nur Pointer.
Ein Array mit 200 Einträgen nimmt also ca. 200 * 4Byte in Anspruch.
Die einzelnen Zeilen werden intern auch nur in einem Array gespeichert.
Solange da nichts reingeschrieben wird, braucht man auch nicht mehr Speicher.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

AW: Stringgrid Zeilen füllen

  Alt 3. Dez 2012, 09:40
Das, was ich als zweite Methode angegeben habe, ist schon optimal. Mein Problem ist ja nicht: 'Wie mache ich das?' sondern: 'Wieso verhält sich Stringgrid so tückisch, daß Methode 1 teilweise (aber eben nur teilweise!) funktioniert?'
Das StringGrid verhält sich nicht tückisch, sondern du benutzt es nicht as designed.

Du hast ein Verhalten beobachtet und daraus ein Standardverhalten abgeleitet, welches aber nicht zugesichert wird.

Somit bleibt nur die Möglichkeit des ständigen Setzens der Zeilenanzahl (deine Methode 2)

oder

die maximal benötigte Anzahl vor der Schleife setzen, und am Ende die tatsächlich benötigte Anzahl zu setzen. In den meisten Fällen sollte das auch die schnellste Möglichkeit sein.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:29 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