Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TActionList enable/disable (https://www.delphipraxis.net/210370-tactionlist-enable-disable.html)

ThomasWB 13. Apr 2022 16:26

TActionList enable/disable
 
Hallo zusammen,
ich lade nach dem Start meiner Applikation eine Anzahl grösserer Dateien (Excel) im Hintergrund in Grids. Solange die Dateien nicht geladen sind, möchte ich alle Aktionen (Buttons, Menüs etc.), die diese Daten benötigen, deaktiviert haben,
Nachdem ich nun anfange TActionList zu verwenden, kam mir der Gedanke all die Aktionen, die mit diesen Dateien zusammenhängen, in eine TActionList zu packen und diese erst zu aktivieren, wenn alle Daten geladen sind.
Geht das irgendwie?

Billa 13. Apr 2022 16:34

AW: TActionList enable/disable
 
Hallo,
Ja, das geht recht einfach. Deine Actions haben jeweils ein "update"-Event. darin setzt Du "ActionXXX.Enabled" auf true/false abhängig vom Status des Ladens. Wird der Status durch die Laderoutinen irgendwann true, wird die entsprechende Action aktiviert...

Uwe Raabe 13. Apr 2022 16:46

AW: TActionList enable/disable
 
Eventuell geht hier auch
Delphi-Quellcode:
ActionList.State := asSuspended
. Dabei bleibt zwar die Enabled-Eigenschaft der Actions unverändert, aber es wird kein Execute ausgeführt.

Siehe: System.Actions.TActionListState

ThomasWB 16. Apr 2022 14:29

AW: TActionList enable/disable
 
Vielen Dank für die Antworten. Leider ist keine von beiden meine erhoffte Lösung. Ich dachte, dass ich mit einem Schlag alle Aktionen einer ActionList deaktiviere.

Die Lösung von Uwe Raabe ist hier leider auch nur die halbe Lösung, da der Anwender in diesem Falle einen aktiven Button hat, auf den Button drückt (er ist ja nicht deaktiviert) und sich wundert, warum nichts geschieht.

Uwe Raabe 16. Apr 2022 14:34

AW: TActionList enable/disable
 
Ich weiß nicht, ob das bei dir noch unter die Kategorie mit einem Schlag fällt:
Delphi-Quellcode:
 
  for var action in ActionList1 do
    action.Enabled := False;

ThomasWB 16. Apr 2022 17:37

AW: TActionList enable/disable
 
for var action in ActionList1 do
action.Enabled := False;

Wahrscheinlich gibt es keine andere Lösung. Daher danke für diesen "knackigen", kurzen Code.
Evtl. werde ich mir eine Komponente mit einer Enable-Property bauen, die dann dahinter diesen Code hat.

Uwe Raabe 16. Apr 2022 19:42

AW: TActionList enable/disable
 
Zitat:

Zitat von ThomasWB (Beitrag 1504681)
Evtl. werde ich mir eine Komponente mit einer Enable-Property bauen, die dann dahinter diesen Code hat.

Eventuell tut es auch ein
Delphi-Quellcode:
class helper
. Das erspart zumindest die Registrierung (und Verwendung) einer speziellen Komponente.
Delphi-Quellcode:
type
  TActionListHelper = class helper for TActionList
  private
    procedure SetEnabled(Value: Boolean);
  public
    property Enabled: Boolean write SetEnabled;
  end;

procedure TActionListHelper.SetEnabled(Value: Boolean);
begin
  for var action in Self do
    action.Enabled := Value;
end;
Mit dem Getter wird es allerdings etwas schwierig...


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz