Das TStringGrid ist dann intern auch mehrere StringListen, also pro Zeile eine TStringList und je
Column Cell ein String.
Auch wenn es hier zum Glück "aktuell" geht, so ist es mit mehreren "Zeilen" je Cell (ListenZeile) eher als problematisch anzusehen.
Hier gleich mal ein gutes Beispiel, dass der Unterschied zwischen Daten-Komponente und
GUI-Komponente schnell relevant sein kann.
Also TMemo (Memo.Lines = TMemoStrings) versus TStringList :
* das Memo speichert
eigentlich alles in einem Stream ... also quasi in .Text, was "ein" String ist
* übergibt man einem Lines[i] einen mehrzeiligen String, dann
* * wird das in mehrere Zeilen aufgetrennt (nachfolgende Zeilen verschieben sich)
* * man muß aufpassen welche Zeilenumbrüche man benutzt, denn #13#10, #10 und #13, aka CRLF, LF und CR, werden vom Memo unterschiedlich behandelt
* * ändert man eine Line (egal ob mehrzeilig oder nicht), wird der komplette Stream und womöglich auch die ganze Speicherverwaltung umgeschrieben, wenn sich der gesamte Stream/String sich ändert
* * und bei vielen Zeilen / größeren Änderungen wird das TMemo extrem unperformant
* bei der TStringList dagegen ist/bleibt jede Line ein eigener String, auch wenn Mehrzeiliges zugewiesen wird.
* aber beim Zugriff .Text wird dann alles wieder zu einem String und die Lines trennen sich auf, vor allem auch beim SaveToFile/LoadFromFile