Hallo, ich habe versucht folgenden Code aus der Code Library zu testen, um Actions zur Laufzeit zu erstellen:
Delphi-Quellcode:
var iItem:TActionClientItem;
iAction:TAction;
begin
iAction := TAction.Create(myActionManager); //Hier wird die Action für das Item erstellt
iItem := myActionManager.ActionBars[0].Items.Add; //Und hier wird das Item zu dem Menü mit Index 0 geaddet.
iAction.Caption := 'Mein Item'; //Hier wird dem Item die Eigenschaft Caption zugewiesen.
iItem.Action := iAction; //Hier wird dem Item seine Action zugewiesen.
end;
Das funktioniert an sich wunderbar. Jetzt habe ich aber dem Actionmanager noch eine ImageList hinzugefügt und versucht per:
iAction.ImageIndex:=0;
den jeweiligen ImageIndex zuzuweisen.
Dabei bekomme ich allerdings eine EAccessViolation und habe keinen Plan, wo die herkommt. Er meckert bei folgendem Code in der ActnMan:
Delphi-Quellcode:
procedure TCustomActionControl.DrawGlyph(const Location: TPoint);
var
ImageList: TCustomImageList;
DrawEnabled: Boolean;
begin
if not HasGlyph then exit;
if Assigned(Action) then
ImageList := ActionClient.Action.ActionList.Images //Hier scheint er abzuschmieren
else
ImageList := ActionClient.OwningCollection.ActionManager.Images;
if not Assigned(ImageList) then exit;
DrawEnabled := Enabled and (ActionClient.ImageIndex <> -1) or
(csDesigning in ComponentState);
ImageList.Draw(Canvas, Location.X, Location.Y, ActionClient.ImageIndex,
dsTransparent, itImage, DrawEnabled);
end;
Hat vielleicht jemand eine Idee, was man da machen kann?
Ich nutze übrigens Delphi 7 Enterprise und habe das ActionUpdate von Steve Trefethen
http://homepages.borland.com/strefethen/ benutzt.
Vielen Dank im voraus,
Fingolfin