Registriert seit: 6. Apr 2005
10.109 Beiträge
|
Re: Im Stringgrid oben eine neue Zeile einfügen
31. Jul 2005, 11:47
Hallo yankee,
die Signatur deiner Funktion InsertGridLine() zeigt mir, dass du dir schon etwas mehr Gedanken als ein Anfänger machst. Durch die von dir gewählte Signatur erhöhst du die Wiederverwendbarkeit beträchtlich. Ist doch schade, wenn du dann bei der Implementierung nur die Minimalanforderung von Thomas umsetzt. Deswegen mein Hinweis auf die FixedRows.
Ich glaube ja nicht, dass du vor dem Schreiben deiner Schleife den Quellcode von der Komponente analysiert hast. Solange der accessor für die array property Rows aber TStrings zurückliefert, musst du nach dem black box Prinzip die für das Kopieren vorgesehene Methode Assign() verwenden. Wäre jetzt eine Row wirklich eine Komponente der Klasse TStrings, dann würdest du Zeiger kopieren, wobei der Zeiger auf die letzte Row vernichtet würde und der Zeiger auf die neue Zeile identisch mit dem der Zeile darüber wäre - oder? Ergebnis wäre ein Speicherleck und eine Doppelreferenz der Zeilen index und Succ(index) auf die gleichen Daten. Passiert aber nicht, weil intern die Spaltenwerte erst beim Zugriff zu einer StringList zusammen gezogen werden. Auch der Schreibzugriff ist etwas komplexer als eine bloße Zeigerzuweisung. Also sage ich "Glück gehabt", aber es gilt ja auch "Glück hat nur der Tüchtige" und dann bist du ja auf dem richtigen Weg.
Sonntagsgrüße vom marabu
|