Hallo, es funktioniert jetzt alles.
Ich habe mir einen eigenen ActionList Componenten-Editor geschrieben unter der Zuhilfenahme des Collection-Editors von LMD und den ActionList-Editor aus dem Lazarus-Projekt. Der Editor funktioniert jetzt gut und ich kann alles das damit machen, was ich mit dem Delphieigenen auch tun kann. Dann hatt ich noch das Problem, dass ich keinen Doppelklick auf die Komponente im LMD Designer machen konnte, da dies nicht unterstützt wird. Mittlerweile habe ich aber auch hier eine Lösung durch den Support und nutze LMDDesigner.OnDblClick und finde da heraus, auf welche ActionList ich geklickt habe und rufe dann von Hand den ActionList-Editor auf.
@shima: Ja, das ein oder andere musste ich auch mit RegisterClass registrieren, damit es gespeichert werden kann. Im Moment bin ich erst man zufrieden und glücklich, die ganze Sache hat mich volle vier Tage gekostet.
Noch eine frage nebenbei:
Ich habe mit eine Klasse von TActionList abgeleitet, die ungefähr so aussieht:
Delphi-Quellcode:
TMyActionList = class(TCustomActionList)
privat
FActionList = TCustomActionList;
function GetActionList: TCustomActionList;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Actions: TCustomActionList read GetActionList;
end;
constructor TMyActionList.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FActionList := self;
end;
destructor TMyActionList.Destroy;
begin
FActionList := nil;
inherited Destroy;
end;
function TMyActionList.GetActionList: TCustonActionList
begin
Result := FActionList;
end;
Damit wollte ich eigentlich erreichen, dass ich ein sichtbares Property im Objektinspektor habe auf sich selbst um damit dann auch den Property-Editor aufrufen zu können. Das funktioniert auch soweit, zumindest unter LMD. Wie es direkt in Delphi aussieht kann ich nicht sagen.
Das Problem ist aber, wenn die Komponente zerstört wird, z.B. das Programm wird geschlossen oder ich schließe den Designer, dann wird unendlich oft auf GetActionList zugegriffen und irgendwann kommt es zum Stacküberlauf. Ich habe bis jetzt noch keine Möglichkeit gefunden zu prüfen, ob die Komponente zerstört wird und gebe in diesem Fall nil zurück, dann funktioniert es nämlich, habs getestet. Ich habe schon mit Notification usw. getestet, aber bevor es da rein springt, springt er erst in GetActionList und da kommt er dann "nicht mehr raus". Falls jemand eine Idee hat, ob man das überhaupt irgendwie machen kann, nur her damit, ansonsten kann ich auch mit dem Doppelklick leben.
Grüße Sven