ich habe ein Problem mit der aktuellen Version 1.8 von Lazarus, das unter Version 1.4.2 noch nicht bestand.
Um aus einem dynamischen Array einen Eintrag herauszulöschen verwende ich folgenden Code:
Code: Alles auswählen
// TxtFenster ist wie folgt deklariert:
TxtFenster: Array of TSynEdit;
// die Einträge werden dynamisch erzeugt.
function TfrmMain.CreateNeuenText(): Integer;
var Idx: Integer;
begin
Idx := Length(TxtFenster);
DateinamenListe.Add('Unbenannt' + IntToStr(Idx + 1));
KodierungsListe.Add(Standardkodierung);
SetLength(TxtFenster, Idx + 1);
TxtFenster[Idx] := TSynEdit.Create(Self);
with TxtFenster[Idx] do
begin
OnKeyDown := @SEditKeyDown;
OnKeyPress := @SEditKeyPress;
OnChange := @SEditCh.....
// Eintrag herauslöschen:
ShowMessage('High(TxtFenster): ' + IntToStr(High(TxtFenster))); // liefert bei 5 Elementen 4
for i := Idx to High(TxtFenster) - 1 do
TxtFenster[i] := TxtFenster[i + 1];
ShowMessage('High(TxtFenster): ' + IntToStr(High(TxtFenster))); // liefert 4
SetLength(TxtFenster, High(TxtFenster));
ShowMessage('High(TxtFenster): ' + IntToStr(High(TxtFenster))); // liefert 3
Das Problem ist nun, dass zwar das TxtFenster[Idx] gelöscht wird, alle TxtFenster unterhalb von Idx aber den Inhalt des gelöschten Elementes beinhalten.
Die nachvolgenden aber ihren korrekten Inhalt behalten?
Was ich auch nicht verstehe, warum SetLength(TxtFenster, High(TxtFenster)); die Elementzahl verringert. Richtigerweise müsste hier doch stehen: SetLength(TxtFenster, High(TxtFenster)-1);
HILFE