Hi Silent,
in Deinen Code sind 2 Fehler (einer ist gemein
)
Code:
procedure TForm1.Memo1Click(Sender: TObject);
var bla: integer;
begin
[color=#ee0000]for bla := 0 to memo1.Lines.Count do [/color] // 1
begin
[color=#ee0000]if memo1.Lines.Text = '' then [/color] // 2
begin
memo1.Lines.Delete(bla);
end;
end;
end;
Erst einmal zu Nr. 2. Du fragst für jede Zeile, die Du überprüfen
möchtest immer den gesamten Text ab. Ändere nach
if memo1.Lines[bla] = '' then
Der erste ist gemein und basiert auf der Optimierung durch Delphi. Der führt, wenn eine Leerzeile gelöscht wurde, zu einer Index-Verletzung. Als obere Grenze legst Du
memo1.Lines.Count fest. Das nimmt Delphi auch wörtlich und merkt sich den Wert vor dem Start der Schleife. Werden also innerhalb der Schleife irgendwelche Zeilen gelöscht, so geht Dein Programm über das neue (geringere) Ende der Liste hinaus und versucht einen nicht-existierenden String zu laden
Ausserdem musst Du die obere Grenze beachten, welche fast immer nicht
count sondern
count - 1 ist. (suche mal nach 0-basierten Listen). Ändere die Zeile (// 1) auf
for bla := memo1.Lines.Count - 1 downto 0 do
und alles sollte funktionieren.
...
...