Delphi-PRAXiS

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/)
-   -   Delphi Auslöser einer Action feststellen will nicht so recht (https://www.delphipraxis.net/31785-ausloeser-einer-action-feststellen-will-nicht-so-recht.html)

sieppl 13. Okt 2004 20:47


Auslöser einer Action feststellen will nicht so recht
 
Hi!

Guckt euch mal bitte diesen Code an:
Delphi-Quellcode:
procedure TMainForm.AddFolderActionUpdate(Sender: TObject);
begin
  if (Sender as TAction).ActionComponent is TMenuItem then //das hier klappt nicht
    (Sender as TAction).Enabled := TreeView.PopUpNode <> nil
  else
    (Sender as TAction).Enabled := TreeView.Selected <> nil;
end;
Die Action wird entweder durch einen Button oder eine MenuItem eines PopUpMenüs ausgelöst.
Falls dieser Aufruf über das PopupMenü kommt wird ActionComponent aber nicht als TMenuItem erkannt.
Wo liegt der Fehler?

Grüße

Sebastian

Christian Seehase 13. Okt 2004 20:55

Re: Auslöser einer Action feststellen will nicht so recht
 
Moin Sebastian,

also wenn ich das richtig verstehe (benutzt hab' ich das noch nicht), wird OnUpdate nicht durch eine Kompo ausgelöst.
Dafür wäre OnExecute zuständig.

sieppl 13. Okt 2004 21:04

Re: Auslöser einer Action feststellen will nicht so recht
 
Zitat:

Zitat von Christian Seehase
Moin Sebastian,

also wenn ich das richtig verstehe (benutzt hab' ich das noch nicht), wird OnUpdate nicht durch eine Kompo ausgelöst.
Dafür wäre OnExecute zuständig.

Das hier funktioniert zum Beispiel definitiv:

Delphi-Quellcode:
procedure TMainForm.AddPicturesActionUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled := ThumbListView.SelCount > 0;
end;
Dadurch werden entweder das TMenuItem oder der Button enabled oder auch nicht.
In meinem 1. Post muss ich halt die Überprüfung je nach Auslöser unterschiedlich
gestalten..

Christian Seehase 13. Okt 2004 21:09

Re: Auslöser einer Action feststellen will nicht so recht
 
Moin Sebastian,

im funktionierenden Beispiel fragst Du auch nur den Sender aber, nicht aber die entsprechende Komponente, die, IMHO, nil zurückliefern dürfte innerhalb einer OnUpdate Prozedur.

Lass Dir das doch mal anzeigen.

alcaeus 13. Okt 2004 21:15

Re: Auslöser einer Action feststellen will nicht so recht
 
Hi sieppl,

in der OH steht folgendes:
Indicates the client component that caused this action to execute.

ActionComponent ist also nur bei OnExecute und nicht bei OnUpdate verfügbar. Nach der Ausführung des Codes im OnExecute wird ActionComponent wieder auf nil gesetzt.

Greetz
alcaeus

sieppl 13. Okt 2004 21:22

Re: Auslöser einer Action feststellen will nicht so recht
 
Zitat:

Zitat von Christian Seehase
Moin Sebastian,

im funktionierenden Beispiel fragst Du auch nur den Sender aber, nicht aber die entsprechende Komponente, die, IMHO, nil zurückliefern dürfte innerhalb einer OnUpdate Prozedur.

Lass Dir das doch mal anzeigen.

Ihr habt Recht. Gibt es denn irgendeine Möglichkeit bei OnUpdate an die Komponente zu kommen?
Ich möchte keine 2 Actions anlegen, dass wäre unelegant..

Christian Seehase 13. Okt 2004 21:27

Re: Auslöser einer Action feststellen will nicht so recht
 
Moin Sebastian,

da OnUpdate nicht von einer Komponente ausgelöst wird, sondern bei Inaktivität der Anwendung, kann es dafür keine Lösung geben.


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