![]() |
AW: Stringgrid Zeilen füllen
@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! |
AW: Stringgrid Zeilen füllen
setz halt
Delphi-Quellcode:
Dann braucht das Array nur einmal durchlaufen
RowCount := high(xyarray) + FixRows
|
AW: Stringgrid Zeilen füllen
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 |
AW: Stringgrid Zeilen füllen
Zitat:
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?' |
AW: Stringgrid Zeilen füllen
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] = 'text' then begin inc(j); MitIrgendEinerProcedureDasStringGridBefüllen; //hier das Grid befüllen, in der Zeile "j" end; end; RowCount := j + FixRows; |
AW: Stringgrid Zeilen füllen
Zitat:
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. |
AW: Stringgrid Zeilen füllen
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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