Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Korreekte Verwendung TActionList.OnUpdate / TAction.OnUpdate (https://www.delphipraxis.net/211277-korreekte-verwendung-tactionlist-onupdate-taction-onupdate.html)

Uwe Raabe 26. Aug 2022 08:37

AW: Korreekte Verwendung TActionList.OnUpdate / TAction.OnUpdate
 
Zitat:

Zitat von BerndS (Beitrag 1510745)
In welcher Form könnte sich das negativ auswirken?

Das UpdateAction wird ja zyklisch aufgerufen. Insofern kann sich in manchen Fällen z.B. die Enabled-Bedingung der Action zwischen dem letzten UpdateAction und dem Execute-Aufruf geändert haben. Der Update-Aufruf im Execute würde das erkennen und entsprechend agieren.

Zitat:

Zitat von BerndS (Beitrag 1510745)
Was mir aufgefallen ist, das Actions, denen kein OnExecute zugewiesen ist, automatisch auf Enabled := False gesetzt wird.

Dafür gibt es bei der Action die Eigenschaft DisableIfNoHandler, die per Default auf True steht.

Zitat:

Zitat von BerndS (Beitrag 1510745)
Ich habe eigendlich angenommen, dass UpdateActions der beste Zeitpunkt ist, die Actions zu setzen. Der Name der Prozedur sagt doch alles.

UpdateActions wird von zwei Stellen aufgerufen: Aus einem ActionMenu im Zusammenhang mit einem ActionManager und im TApplication.DoActionIdle. Letzteres wird im TApplication.Idle aufgerufen wenn Done = True ist oder in einem Timer-Event wenn mit ActionUpdateDelay > 0 die Update-Frequenz gedrosselt wird (das ist z.B. bei MDI-Anwendungen notwendig). Somit geschieht das in der Regel dann, wenn die Applikation gerade nichts besseres zu tun hat.

Zwischen einem UpdateAction und dem Action-Execute liegt also immer eine zeitliche Lücke. Wenn dann noch mit Application.ProcessMessages hantiert wird, sind sporadische Merkwürdigkeiten kaum noch vermeidbar.

BerndS 26. Aug 2022 09:29

AW: Korreekte Verwendung TActionList.OnUpdate / TAction.OnUpdate
 
DisableIfNoHandler kannte ich noch nicht. Es ist leider nicht published. Daher habe ich den Actions, die z.B. nur ein Submenü zugewiesen sind immer eine leere OnExecute zugewiesen. DisableIfNoHandler im Quelltext auf False wäre nun auch eine Option, aber das per OI setzen zu könnnen, wäre schon wünschenswert.

Zitat:

Zwischen einem UpdateAction und dem Action-Execute liegt also immer eine zeitliche Lücke. Wenn dann noch mit Application.ProcessMessages hantiert wird, sind sporadische Merkwürdigkeiten kaum noch vermeidbar.
Im UpdateAction soll doch lediglich Enabled und oder Visible der Action verändert werden. Das Execute würde doch erst erfolgen, wenn ich ein zugewiesenes Control (Button, Menü usw. anklicke / drücke)
Application.ProcessMessages wird hier nicht aufgerufen.

Uwe Raabe 26. Aug 2022 09:40

AW: Korreekte Verwendung TActionList.OnUpdate / TAction.OnUpdate
 
Es kann ja durchaus sein, dass es in deiner Anwendung nicht relevant ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 Uhr.
Seite 2 von 2     12   

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