Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#9

AW: TAction, Shortcut Probleme

  Alt 30. Mai 2013, 20:56
Zitat von haentschman:
Das riecht nach einem Verständnisproblem meinersets.
Inwieweit?

Die Actionlisten haben ein Attribut State.
Die Delphi 7-Hilfe schreibt dazu:
Zitat:
Die Eigenschaft State gibt an, ob die Aktionen in der Aktionsliste reagieren, wenn der Benutzer ein Client-Objekt auslöst.

Delphi-Syntax:

type TActionListState = (asNormal, asSuspended, asSuspendedEnabled);
property State: TActionListState;

C++ Syntax:

enum TActionListState {asNormal, asSuspended, asSuspendedEnabled};
__property bool State = {read=FState, write=SetState, default=asNormal};

Beschreibung

Mit State können Sie eine Aktionsliste aktivieren oder deaktivieren. Die folgenden Werte sind für State zulässig:

Wert Bedeutung

asNormal Aktionen führen ihre normalen Reaktionen aus, wenn sie von Client-Objekten oder Direktbefehlen ausgelöst werden.
asSuspended Die Aktionen in der Aktionsliste reagieren nicht, wenn sie von Client-Objekten ausgelöst werden. Die Eigenschaft Enabled aller Aktionen in der Liste bleibt unverändert.
asSuspendedEnabled Die Aktionen in der Aktionsliste reagieren nicht, wenn sie von Client-Objekten ausgelöst werden. Die Eigenschaft Enabled aller Aktionen in der Liste wird auf True gesetzt. Wird zum Entwurf von ActionBars verwendet.
Es muss also zur Laufzeit "nur" der Status für alle Aktionslisten auf asSuspended gesetzt werden und für die Aktionsliste(n) die aktive bleiben soll(en) auf asNormal.

Das dürfte den Aufwand weiter reduzieren.
Hab's gerade mal damit ausprobiert:
Delphi-Quellcode:
procedure TForm1.PageControl1Change(Sender: TObject);
begin
  Caption := 'Active Seite = ' + IntToStr(PageControl1.ActivePageIndex);
  frmTestmalwas1.ActionList1.State := asSuspended;
  frmTestmalwas2.ActionList1.State := asSuspended;
  frmTestmalwas3.ActionList1.State := asSuspended;
  case PageControl1.ActivePageIndex of
    0 : frmTestmalwas1.ActionList1.State := asNormal;
    1 : frmTestmalwas2.ActionList1.State := asNormal;
    2 : frmTestmalwas3.ActionList1.State := asNormal;
  end;
end;

// Alle Actions haben im OnExecute-Ereignis diese Routine zugewiesen.
procedure TfrmTestmalwas.Action1Execute(Sender: TObject);
begin
  ShowMessage(Format('%s %s %s',[ShortCutToText(TAction(Sender).Shortcut),
                                 TAction(Sender).Name,
                                 Self.Name]));
end;
Beim Betätigen der Shortcuts bekomme ich dann die Antwort aus dem entsprechenden Frame und von der entsprechenden Aktion.
  Mit Zitat antworten Zitat