Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Probleme mit u.a. Timern in Array

  Alt 22. Apr 2009, 08:09
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?
  Mit Zitat antworten Zitat