Einzelnen Beitrag anzeigen

Sliver18

Registriert seit: 4. Aug 2011
Ort: Hamburg
19 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: ActionList mit Actions unterschiedlicher Klassen kopieren

  Alt 5. Aug 2011, 12:55
Bereits beim Ersten Zugriff auf "NeueAktion", also beim Setzen von "Caption" kommt es zu einer Zugriffsverletzung und der grund dafür ist nicht so richtig ersichtlich.
Ich denke mal, das Setzen von Caption wird irgendeinen Event innerhalb der Actionlist abfeuern - die zu dem Zeitpunkt ja noch nicht gesetzt ist. (Wenn Du die Property "Caption" vor "Actionlist" setzt)

NeueAktion := SourceActionList.Actions[i].ClassType.Create;
Ich habe hier das Gefühl, dass hier nur der Konstruktor von TObject aufgerufen wird und nicht der Deiner ActionKlasse - das könnte eine der Ursachen sein, teste das doch mal.

Ich habe mal ein bischen getestet und folgender Code läuft bei mir (ich musste allerdings die TRVActionklassen durch TAction ersetzen, da die TRV's bei mir nicht vorhanden sind):

Code:
procedure ActionListDuplizieren(ZielActionList:TActionList; SourceActionList: TActionList);
var
   i: integer;
   Ta:TContainedActionClass;
   NeueAktion, AlteAktion: TAction; // typ geändert (damit nicht ständig gecastet werden muss
begin
   if assigned(ZielActionList) and assigned(SourceActionList) then begin
      if SourceActionList.ActionCount > 0 then begin
        for i := 0 to SourceActionList.ActionCount - 1 do begin
          AlteAktion := TAction(SourceActionList.Actions[i]); // alte Aktion holen, damit wir nicht immer über den index gehen müssen
          NeueAktion := TAction( AlteAktion.ClassType.Create );

          if NeueAktion is TAction then begin
            NeueAktion.ActionList := ZielActionList;
            NeueAktion.Caption := 'hi';
            NeueAktion.Hint := AlteAktion.Hint;
            NeueAktion.ShortCut := AlteAktion.ShortCut;
            NeueAktion.ImageIndex := 0;
          end;
        end;
      end;
   end;
end;
JP

Geändert von Sliver18 ( 5. Aug 2011 um 14:58 Uhr) Grund: Fehler im Quelltext
  Mit Zitat antworten Zitat