Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-06-2012
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
Llamar evento sabiendo el nombre

Hola

Estoy creando unos componentes y me surge la necesidad (por eso de querer hacer funciones generales) de hacer una llamada a un método (evento) sabiendo sólo el nombre (en una cadena).

Gracias a este mensaje (http://stackoverflow.com/questions/4...ed-in-a-string) se cómo llamar a un método teniendo el nombre de éste en la cadena. Lo que pasa es que al ser un evento necesito saber si éste está asignado antes de invocarlo (para evitar esos AV molestos).

¿Alguna idea de cómo poder controlar si el evento está asignado?

Gracias
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
  #2  
Antiguo 19-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por cbrrr Ver Mensaje
¿Alguna idea de cómo poder controlar si el evento está asignado?
Hola cbrr.

Una forma es:
Código Delphi [-]
uses  TypInfo;

function MethodAssigned(const aObject: TObject; const MethodName: string): Boolean;
var
  Method: TMethod;
begin
  Method:= GetMethodProp(aObject, MethodName);
  Result:= Method.Code <> nil;
end;

Uso:
Código Delphi [-]
...
begin
  MethodName:= 'OnClick';
  if MethodAssigned(Edit1, MethodName) then
   ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 19-06-2012
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
Y mira que conocía la función GetMethodProp de la TypInfo, pero no caí en él. Y ya que tiro de la RTTI, puedo usarlo para lanzar directamente el evento

Gracias
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
  #4  
Antiguo 19-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
[offtopic]

Vaya, vaya... joe bar team y cbrrr

[/offtopic]
Responder Con Cita
  #5  
Antiguo 19-06-2012
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
Hola,
Si estás usando Delphi 2010 o superior, tal vez te interese revisar la RTTI extendida, que permite hacer muchas más cosas que TypInfo y de forma más sencilla (más orientada a objetos). Simplemente incluye en el uses "RTTI", y añádete una variable de TRTTIContext, y verás cómo es más o menos sencillo:

Código Delphi [-]
//Ejemplo tomado de http://stackoverflow.com/questions/2...event-properly
function MethodAssigned(const aObject: TObject; const MethodName: string): Boolean;
var
  LContext: TRttiContext;
  LValue: TValue;
  LEvent: TNotifyEvent;
begin
  LValue:=LContext.GetType(aObject.ClassType).GetProperty(MethodName).GetValue(aObject);
  LEvent:=LValue.AsType();  //Los () son necesarios, para que el compilador distinga entre 
                                                           //llamar a AsType y lanzar el evento.
  if assigned(LEvent) then
    LEvent(Self);
end;

Un saludo,
LoPiTaL
Responder Con Cita
  #6  
Antiguo 20-06-2012
Avatar de cbrrr
cbrrr cbrrr is offline
Miembro
 
Registrado: jun 2004
Posts: 57
Poder: 20
cbrrr Va por buen camino
Buenas LoPiTaL,

Efectivamente, ese enlace lo encontré buscando información por la web, pero como quiero que los componentes funcionen en versiones "viejas" de Delphi, esa solución no me sirvió (aunque está bien ponerla como documentación)

Gracias de nuevo
__________________
Si no tienes algo que decir más importante que el silencio, cállate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Acceder a un objeto sabiendo solo el nombre jmrp C++ Builder 5 16-09-2011 15:00:32
Ejecutar procedimiento sabiendo únicamente su nombre DarkDudae OOP 4 26-03-2011 13:19:26
Asignacion función sabiendo nombre fjcg02 OOP 1 07-01-2011 11:23:02
Llamar a evento Memo6015 OOP 3 15-10-2008 22:07:17
Llamar evento desde otro evento nachito_tuc OOP 1 23-08-2006 21:37:43


La franja horaria es GMT +2. Ahora son las 18:44:08.


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
Copyright 1996-2007 Club Delphi