Delphi-Quellcode:
function KontoLoeschen(lID: Cardinal): Boolean;
var
I: Cardinal;
begin
result := false;
{ außerhalb }
If not (lID in [Low(MKonten)..High(MKonten)]) then
exit;
(* wird bereits durch die vorherige Bedingung abgedeckt
{ 0 Einträge }
result := (Length(MKonten) > 0);
if not result then
exit;
*)
(* überflüssige Sonderbehandlung
{ 1 Eintrag }
If (Length(MKonten) = 1) then
begin
result := (lID = 0);
if (Result) then
begin
FreeAndNil(MKonten[lID].ITimer);
SetLength(MKonten, 0);
exit;
end;
end;
*)
{ 2+ Einträge }
(* Free reicht eigentlich, der Eintrag wird sowieso gleich überschrieben *)
FreeAndNil(MKonten[lID].ITimer);
{ -> verschieben und Rest eins hochrücken }
(* überflüssige Sonderbehandlung
case (High(MKonten) - lID) of
0:
SetLength(MKonten, High(MKonten));
1:
begin
MKonten[Pred(High(MKonten))] := MKonten[High(MKonten)];
SetLength(Mkonten, Pred(High(Mkonten))); <- FEHLER ein Element zu viel gelöscht
end;
else
begin
for I := lID to (Length(MKonten) - 2) do
MKonten[I] := MKonten[Succ(I)];
SetLength(MKonten, Pred(Length(MKonten)));
end;
end;
*)
for I := lID to (Length(MKonten) - 2) do
MKonten[I] := MKonten[Succ(I)];
SetLength(MKonten, Pred(Length(MKonten)));
result := true;
{ MenuItem suchen und löschen }
for I := Pred(MCForm.M_Check.Count) downto 0 do
if (MCForm.M_Check.Items[I].Tag = Succ(lID)) then
MCForm.M_Check.Delete(I);
end;
Edit:
Was passiert eigentlich mit dem Tag der nachfolgenden Menüelemente, müsste der nicht auch angepasst werden?