AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Actions verwenden - Pre- und Post-Action

Ein Thema von mm1256 · begonnen am 5. Jul 2015 · letzter Beitrag vom 6. Jul 2015
 
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, 12: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz