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