Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Conocer el componente que lanza un popup (https://www.clubdelphi.com/foros/showthread.php?t=42297)

sitrico 11-04-2007 01:43:30

Conocer el componente que lanza un popup
 
Tengo creado un tScrollBox que contiene varios objetos tjvStaticText, a esos objetos (los tjvStaticText) les asigno un popupmenu que a su vez contiene los menus asociados a Taction, cuando ejecuto el método taction.execute como puedo saber cual de los objetos tjvStaticText lanzó el popup.

OJO: todo esos componentes los creo en tiempo de ejecución.

Pensé que debia usar el (sender) así:

Código Delphi [-]
procedure Tform.AccionExecute(Sender: TObject);
begin
If Sender is tjvStaticText Then
   EjecutarProcedimiento(tjvStaticText(sender).tag);
end;

Pero al probar resulta que "sender" no es tjvStaticText (es un tAction :confused: ), como puedo saber dentro el execute de la acción que objeto desplegó el popup

Acepto ideas y sujerencias ya que no tengo la menor idea de como resolver esto, muchas gracias. :o

sitrico 11-04-2007 04:47:02

Sigo sufriendo...

La clase TAction tiene la propiedad: ActionComponent que segun dice la ayuda de Delphi:

Cita:

Description

Use ActionComponent to discern which client component caused this action to execute. For example, examine ActionComponent from an OnExecute event handler if you need to know what user action triggered this action.

When the user clicks a client control, that client sets ActionComponent before calling the action’s Execute method. After the action executes, the action resets ActionComponent to nil (Delphi) or NULL (C++).
Deberia apuntar al componente que llamó la acción: el TMenuItem !!!!!

Un componente que no puede tener el foco podrá lanzar eventos???

sitrico 11-04-2007 05:04:58

La desesperaciónera tal que buscando en un foro EN RUSO :

http://www.sql.ru/forum/actualthread.aspx?tid=395220

encontré esto:

Código Delphi [-]
TPopupMenu(TMenuItem(TAction(Sender).ActionComponent).GetParentComponent).PopupComponent

Que parece ser el componente que realmente inicio la acción.

Despues de las pruebas de rigor FUNCIONA :D :D :D

Quedó así:

Código Delphi [-]
procedure TfCitas.acEnviarAListaEsperaExecute(Sender: TObject);
begin
If TPopupMenu(TMenuItem(TAction(Sender).ActionComponent).GetParentComponent).PopupComponent is TSNMCCita Then
   Begin
   With TSNMCCita(TPopupMenu(TMenuItem(TAction(Sender).ActionComponent).GetParentComponent).PopupComponent) do
      Lista.EnviarAListadeEspera(IdArea,IdPaciente,IdCita);
   JvClock1Alarm(Sender);
   End;
end;


La franja horaria es GMT +2. Ahora son las 13:29:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi