Zitat von
ManuMF:
@Blup: Den Tag nehme ich nur als fortlaufenden Index, der nicht der Position des Kontos im Array entspricht (sonst müsste ich den bei jedem Löschen auch verändern). Der Tag ist mit dem des Timers identisch, dadurch kann ich allen Timern das gleiche Event zuweisen und darin das Konto ermitteln:
Delphi-Quellcode:
procedure TMCForm.PostPruefenAufruf(Sender: TObject);
begin
PostPruefen(Pred(TTimer(Sender).Tag));
end;
Dann werde ich mich jetzt mal an die Überarbeitung der Lösch-Procedure bzw. die ObjectList machen
Die an die Löschprozedur übergebene lID wird aber als Position des Kontos im Array behandelt.
Zumindest um den Timer zusammen mit dem Eintrag im Array zu löschen.
Wenn diese nicht mit dem Tag des Timer und des MenuItem übereinstimmt, dann muss dieser Tag aus dem Timer ermittelt werden, um das richtige Menüitem zu löschen.
Delphi-Quellcode:
function KontoMenuLoeschen(lTag: Cardinal): Boolean;
var
i: Integer;
begin
{ MenuItem suchen und löschen }
for i := Pred(MCForm.M_Check.Count) downto 0 do
begin
Result := (MCForm.M_Check.Items[i].Tag = lTag);
if Result then
begin
MCForm.M_Check.Delete(i);
Exit;
end;
end;
Result := False;
end;
{...}
KontoMenuLoeschen(MKonten[lID].ITimer.Tag);
FreeAndNil(MKonten[lID].ITimer);
{...}