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ösendes Control rausfinden bei TAction (https://www.delphipraxis.net/96165-ausloesendes-control-rausfinden-bei-taction.html)

Phoenix 19. Jul 2007 17:07


Auslösendes Control rausfinden bei TAction
 
Hi,

man, ich roste echt ein.

Man nehme:
Zwei Controls, ein Popumenu, eine ActionList.
Man definiere eine Action und ein PopupmenuItem. Man hänge die Action an das Menuitem und man hänge das PopupMenu an beide Controls.

In der Action.onExecute ist der Sender immer die auslösende TAction.

Auf der Action gibt es ActionControl. Das ist blöderweise das MenuItem.

Wie finde ich jetzt heraus, von welchem Control aus der Menüeintrag gewählt wurde?

AUSSER in 'onPopup' das Control in eine temporäre Variable zu packen, das kann jeder und das ist unschön.

Hawkeye219 19. Jul 2007 17:40

Re: Auslösendes Control rausfinden bei TAction
 
Hallo Sebastian,

Delphi-Quellcode:
procedure TForm1.Action1Execute (Sender: TObject);
var
  mi : TMenuItem;
  pm : TPopupMenu;
begin
  mi := TAction(Sender).ActionComponent as TMenuItem;
  pm := mi.GetParentMenu as TPopupMenu;
  ShowMessage (pm.PopupComponent.Name);
end;
Das wäre eine weitere Möglichkeit. Aber selbst mit den notwendigen Sicherheitsabfragen ist sie nicht viel schöner als deine Lösung.

Gruß Hawkeye

CalganX 19. Jul 2007 17:42

Re: Auslösendes Control rausfinden bei TAction
 
Hi,
bist du sicher, dass Sender wirklich das Control enthält? Ich meine mich daran zu erinnern, dass im Sender nur die TAction-Instanz drin steht von der Aktion, die du gerade aufrufst.

Chris

Phoenix 19. Jul 2007 17:45

Re: Auslösendes Control rausfinden bei TAction
 
boah :shock:

Delphi-Quellcode:
((((Sender as TAction).ActionComponent as TMenuItem).Owner as TPopupMenu).PopupComponent as TControl)
Da wird man ja verrückt. Aber es geht. Und es ist sauberer als Zwischenspeichern.

Hawkeye219 19. Jul 2007 17:51

Re: Auslösendes Control rausfinden bei TAction
 
Der Owner sollte in der Regel das Formular sein, nimm deshalb besser GetParentMenu statt Owner.

Gruß Hawkeye


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