Einzelnen Beitrag anzeigen

Benutzerbild von Lun
Lun

Registriert seit: 4. Feb 2006
122 Beiträge
 
Delphi 2005 Professional
 
#1

ActionClientItem aus ActionMainmenubar aufräumen?

  Alt 8. Dez 2006, 10:31
Hi @ll,

ich habe ein Problem, ich habe eine ActionMainMenubar, in dieser Menubar erzeuge ich dynamisch in einem Menüpunkt Unterpunkte.
Diese Unterpunkte sind logischerweise vom Typ ActionClientItem, da ich aber zur Caption noch zwei Variablen dazu ablegen möchte,
fehlten mir zwei Stringtypen. Dann habe ich mir gedacht leite ich vom Typ ActionClientItem ab, und dann bastel ich mir meine 2 variablen. Das hat aber nicht funktioniert, keine ahnung warum. Dann habe ich eine Ableitung vom Typ TColletionItem gemacht.

Delphi-Quellcode:
type
  TMyCollectionItem = class(TCollectionItem)

  private
       var1 : String;
       var2 : String;
  public
      

  end;
Jetzt funktioniert das hinzufügen ohne Probleme, ich kann diese beiden Variablen auch ansprechen und gebrauchen. Bsp. Code

Delphi-Quellcode:

var

Item : TActionClientItem

for i := 0 to Liste.Count-1 do begin
      Item := _ActionManager.ActionBars[0].Items[7].Items[in].Items.Add; //Und hier wird das Item zu dem Menü mit Index in geaddet.
      Item.Action := iAction; //iItem wird eine Action zugewiesen
     
      iItem.Caption := 'abc';


       TMyCollectionItem(Item).var1 := 'def';
       TMyCollectionItem(Item).var2 := 'ghz';


        //ShowMessage(TMyCollectionItem(Item).var1 + TMyCollectionItem(Item).var2);
       end;

Aber wenn ich einen Menupunkt neuerzeugen möchte, also den alten löschen einen neuen anlegen, bekomme ich die Items nicht gelöscht:

Delphi-Quellcode:

 //ohne die zwei variblen var1,var2 werden die Items sauber gelöscht
 _DFB_ActionManager.ActionBars[0].Items[7].Items[itemI].Items.Clear;
Wie bekomme ich jetzt hin das die beiden variablen mit gekillt werden?
Hab es bis jetzt so versucht:

TMyCollectionItem(_ActionManager.ActionBars[0].Items[7].Items[in].Items).Free;
TMyCollectionItem(_ActionManager.ActionBars[0].Items[7].Items[in].Items).Collection.Clear;
TMyCollectionItem(_ActionManager.ActionBars[0].Items[7].Items[in].Items).CleanupInstance;
TMyCollectionItem(_ActionManager.ActionBars[0].Items[7].Items[in].Items).FreeInstance;

Ich denke auch nicht das, dass der richtige ansatz ist, da ich so nur ein Item anspreche oder?

Vielleicht hat ja jemand eine Idee, oder vielleicht hätte ich doch von TActionclientItem ableiten müssen, da habe ich aber das
Problem das: _ActionManager.ActionBars[0].Items[7].Items[in].Items.Add;
Die Add funktion von ActionClients ein ActionClientItem zurück gibt. Und das bringt mir nix, und das außer acht lassen geht nicht.
Da dies nicht funtzt:

TMyActionClientItem(Item).var2 := 'ghz'; // Kind-Klasse := ElternKlasse geht net

Also thx for help

greetz Lun
  Mit Zitat antworten Zitat