Einzelnen Beitrag anzeigen

Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#1

Problem mit Dynamischem Menü

  Alt 9. Feb 2012, 16:41
Huhu,

ich habe ein Problem, das einfach klingt, mich aber vor Rätsel stellt.
Ich erstelle PopUp Menü und einer der Einträge hat ein Untermenü, das ich dynamisch generiere, wenn es aufgerufen wird. Soweit kein Problem, das mache ich mit folgendem Code:

Delphi-Quellcode:
      fuunc.ASQLite3Query1.Active := false;
      fuunc.ASQLite3Query1.SQL.Clear;
      fuunc.ASQLite3Query1.SQL.Add('SELECT * FROM kontinente;');
      fuunc.ASQLite3Query1.Active := true;
  
      while not fuunc.ASQLite3Query1.Eof do begin
       SubItem := TMenuItem.Create(Self);
       SubItem.Caption := fuunc.ASQLite3Query1.FieldByName('name').AsString;
       BookArena1.Add(SubItem);
       fuunc.ASQLite3Query1.Next;
      end;
Geht sicher auch Eleganter aber es funktioniert.

Problem ist jetzt, das dieses SubMenü mehrfach aufgerufen werden kann und bei jedem Aufruf diese Punkte im Untermenü generiert. Also würde ich vorher gern erst alle (alten) Punkte löschen. Und da taucht mein Problem auf. Gelöscht bekomme ich jeh einen Eintrag, indem ich ihn genau anspreche. Durch ein "Count" weiß ich auch wieviele Einträge ich habe. Aber genau dieser Wert ändert sich ja, wenn ich einen Eintrag lösche. Ich kann ihn also nicht in einer einfachen for Schleife verwenden.
Als Abhilfe habe ich folgendes versucht:
Delphi-Quellcode:
while BookArena1.Count > 0 do begin
 BookArena1.Delete(BookArena1.Count);
end;
Ich dachte damit wird immer der letzte Menüeintrag gelöscht, bis keine mehr da sind.

Aber bei Ausführung des Codes, bekomme ich eine Zugriffsverletzung und Delphi stürzt komplett ab.

Was mache ich falsch? Wie macht man es richtig?

Gruß,
Andreas
  Mit Zitat antworten Zitat