Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TAction.OnUpdate wird nicht ausgeführt (https://www.delphipraxis.net/194083-taction-onupdate-wird-nicht-ausgefuehrt.html)

Volker Z. 15. Okt 2017 20:10

TAction.OnUpdate wird nicht ausgeführt
 
Hallo Zusammen,

vielleicht bin ich einfach nur zu blöde, oder sitze schon zu lange vor dem Rechner und sehe die Wälder vor lauter Bäumen nicht mehr.

Meine Ausgangssituation: Auf einem Form liegt eine
Delphi-Quellcode:
TActionList
mit den
Delphi-Quellcode:
TAction
s von - sagen wir mal - A - Z. Jede
Delphi-Quellcode:
TAction
hat ihr eigenes
Delphi-Quellcode:
TAction.OnUpdate
. Alle
Delphi-Quellcode:
TAction
s haben (abgesehen von unterschiedlichen
Delphi-Quellcode:
TAction.OnUpdate
) identische Eigenschaften, die Eigenschaft
Delphi-Quellcode:
TActionList.State := asNormal
.

Mein Problem: Es werden alle
Delphi-Quellcode:
OnUpdate
Events von A - Y ausgeführt, nur der für Z eben nicht. Versuche ich weitere
Delphi-Quellcode:
TAction
s einzufügen - mit zugehörigem
Delphi-Quellcode:
TAction.OnUpdate
-Event -, wird dieser auch nicht ausgeführt.

Ich hoffe, ich konnte mein Problem aussagekräftig genug beschreiben.

Kann mir da jemand weiterhelfen?

Gruß Volker

BTW: Nutze Delphi Xe4, Windows 10

TigerLilly 16. Okt 2017 07:19

AW: TAction.OnUpdate wird nicht ausgeführt
 
Dann wirft deine TAction Y eine Exception?

mjustin 16. Okt 2017 07:37

AW: TAction.OnUpdate wird nicht ausgeführt
 
Zitat:

Zitat von Volker Z. (Beitrag 1383358)
Alle
Delphi-Quellcode:
TAction
s haben (abgesehen von unterschiedlichen
Delphi-Quellcode:
TAction.OnUpdate
) identische Eigenschaften

Sie haben alle (verschiedene) OnExecute Methoden? Mir ist einmal aufgefallen dass OnUpdate für eine Action nicht aufgerufen wurde weil dieser kein OnExecute zugewiesen war.

Volker Z. 16. Okt 2017 09:09

AW: TAction.OnUpdate wird nicht ausgeführt
 
Hallo,

vielen Dank erstmal für die Antworten.

Nein, eine Exeption wird von keiner
Delphi-Quellcode:
TAction
geschmissen.

Und: Allen
Delphi-Quellcode:
TActions
sind auch
Delphi-Quellcode:
OnExecute
-Events zugewiesen.

Gruß Volker

TiGü 16. Okt 2017 09:36

AW: TAction.OnUpdate wird nicht ausgeführt
 
Kannst du es in einen kleinen Beispiel-Projekt reproduzieren?

nahpets 16. Okt 2017 09:55

AW: TAction.OnUpdate wird nicht ausgeführt
 
Das Execute wird bei allen ausgeführt?

An verschieb mal die Action Z, an die Postiton A in der Actionlist. Tritt der Fehler immernoch bei dieser Action auf oder jetzt bei der Action, die sich an nun an der Position Z befindet.

Bleibt der Fehler bei der Action, ist die Position uninterresant und das A - Y funktionieren, Z aber nicht nur Zufall. Der Fehler muss dann irgendwo bei der Action Z (und den nachfolgenden) liegen.

Tritt der Fehler nun aber bei der "neuen" Action an Position Z auf, dürfte der Fehler eher im Umfeld der Actionlist zu suchen sein.

In den Sourcen zu Delphi 7 von Forms.pas gibt es die
Delphi-Quellcode:
procedure TApplication.WndProc(var Message: TMessage);
Schau bitte mal in Deinen Quellen nach, ob es bei Deiner Delphiversion in der Forms.pas Quelltext in der Form
Delphi-Quellcode:
CM_ACTIONEXECUTE, CM_ACTIONUPDATE:
  Message.Result := Ord(DispatchAction(Message.Msg, TBasicAction(Message.LParam)));
vorkommt. Wenn ja, setze da mal 'nen Breakpoint hin und schaue, ob der bei allen Actions angesprungen wird.

In der ActnList.pas gibt es die
Delphi-Quellcode:
function TContainedAction.Update: Boolean;
. Setze da ebenfalls mal 'nen Breakpoint und prüfe, ob der Debugger bei allen Actions dort anhält und prüfe mal beim Rückgabewert dieser Funktion, ob es, abhängig von der aufrufenden Action, Unterschiede im Ergebnis gibt.

Eventuell kommst Du ja damit dem Problem näher.

Uwe Raabe 16. Okt 2017 10:12

AW: TAction.OnUpdate wird nicht ausgeführt
 
Zitat:

In inaktiven Phasen der Anwendung wird für jede Aktion, die mit einem Steuerelement oder Menüeintrag verknüpft ist, das Ereignis OnUpdate ausgelöst.
Ist die betroffene Action eventuell nicht mit einem Steuerelement oder Menüeintrag verknüpft?

Volker Z. 16. Okt 2017 11:26

AW: TAction.OnUpdate wird nicht ausgeführt
 
Hallo,

ein herzliches Dankeschön für all die Antworten.

Die Idee 'nen Breakpoint im Update-Event der
Delphi-Quellcode:
TActionList
zu setzten hatte ich schon. Es wurden auch alle
Delphi-Quellcode:
TAction
s aktualisiert, nur eben die eine nicht (bzw. wenn ich weitere
Delphi-Quellcode:
TAction
s hinzufügte).

Die betroffene
Delphi-Quellcode:
TAction
ist mit einem
Delphi-Quellcode:
TButton
verknüpft.

Zwischenzeitlich habe ich das Formular neu gebaut. Jetzt funktioniert es. Mal schauen, ob ich den Unterschied noch finde.

Gruß Volker

nahpets 16. Okt 2017 11:31

AW: TAction.OnUpdate wird nicht ausgeführt
 
Hast Du mal im Quelltext der DFM nach Unterschieden geschaut?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 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