Einzelnen Beitrag anzeigen

mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Actions verwenden - Pre- und Post-Action

  Alt 6. Jul 2015, 13:42
@SirRufo: Das haut leider nicht hin, denn "OnUpdate" wird bereits gefeuert, wenn das Menü gezeichnet wird.

TActionList.OnExecute wäre als Pre-Event geeignet, die infrage kommenden Actions zu disablen, aber das ist mir auch zu umständlich zu implementieren. Aber, ich glaub ich hab die Lösung. Der Grundgedanke ist, in der Action die erforderlichen Actions zu disablen, und nach Ausführung der Action diese wieder zu enablen.

Code-Auszug:

Delphi-Quellcode:
type
  TActionArray = array of TAction;
  TActions = class(TDataModule)
    MyActionList: TActionList;
    acImport: TAction;
    acExport: TAction;
    . . .
  public
    { Public-Deklarationen }
    procedure Actions_Disable(aActionsToDisable: TActionArray);
    procedure Actions_Enable;
  end;

implementation

procedure TActions.Actions_Disable(aActionsToDisable: TActionArray);
var
  i, Lst: integer;
begin
  for i := 0 to Pred(Actions.MyActionList.ActionCount) do begin
    for Lst := Low(aActionsToDisable) to High(aActionsToDisable) do begin
      if Actions.MyActionList.Actions[i] = aActionsToDisable[Lst] then begin
        if Actions.MyActionList.Actions[i].Enabled then begin // Actions die bereits disabled sind ausschließen
          Actions.MyActionList.Actions[i].Tag := 1; // Flag setzen, dass die Action disabled wurde
          Actions.MyActionList.Actions[i].Enabled := false;
        end;
      end;
    end;
  end;
end;

procedure TActions.Actions_Enable;
var
  i: integer;
begin
  for i := 0 to Pred(Actions.MyActionList.ActionCount) do begin
    if Actions.MyActionList.Actions[i].Tag > 0 then begin
      Actions.MyActionList.Tag := 0;
      Actions.MyActionList.Actions[i].Enabled := true;
    end;
  end;
end;

procedure TActions.acImportExecute(Sender: TObject);
begin
  Actions_Disable([acImport,acExport]);
  try
    // Export durchführen
  finally
    Actions_Enable;
  end;
end;
Ein bischen Q&D aber so funktioniert's erst mal. Verbesserungsvorschläge sind gerne willkommen.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat