Zitat:
auf Lines.String[1] zugreife bekomme ich auch die erste hinzugefügte Zeile raus.
Das kann aber nicht stimmen.
Nja, die 1. Eingefügt vieleicht, aber nicht die Erste, welche im Memo drinsteht.
Du hast bestimmt den Komponentennamen vergessen, welchen die
VCL standardmäßig als Inhalt einfügt, wenn du ein Memo auf die Form pappst.
Indize beginnen fast immer bei 0 (der erste Ausgangswert in der Zählung).
Das ist auch bei dynamischen Arrays so ... Offset 0 ist der Anfang.
Nur die Delphi-Strings fangen bei 1 an, aber eigentlich fangen sie auch bei 0 an, wenn man sich mal die Geschichte ansieht.
Siehe
ShortString:
An Position 0 sitzt das Längenbyte und danach folgen die Zeichen.
Wegen der Abwärtskompatibilität hat man dann die neueren Strings (AnsiString) dann auch mit 1 anfangen lassen.
Intern fangen sie aber mit 0 an (Delphi zieht dort intern immer 1 ab).
Delphi-Quellcode:
var
S: String;
P: PChar;
S := '123';
P := PChar(S);
Memo1.Lines.Add(S[1] + ' ' + P[0]); // an Position 0 ist das 1. Zeichen
Memo1.Lines.Add(S[2] + ' ' + P[1]);
Memo1.Lines.Add(S[3] + ' ' + P[2]);
Memo1.Lines.Add(Memo1.Lines[0]); // 0 gibt die 1. Zeile zurück
Memo1.Lines.Add(Memo1.Lines[1]);
Memo1.Lines.Add(Memo1.Lines[2]);