Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-06-2011
r_e_g_2007 r_e_g_2007 is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 20
Poder: 0
r_e_g_2007 Va por buen camino
Question Componente que ejecute un evento de un componente asociado

Hola,
Un saludo a todos
Tengo un componente no visual que tiene una propiedad Control: WinControl. Entonces quisiera que cada vez que se haga clic (OnClick) en el componente que se selecciona en la propiedad Control se ejecute un codigo que tengo en mi componente. Ademas de este código que está en mi componente debe ejecutarse el codigo del evento OnClick del componente asociado si es que el programador le pone algo en ese evento. Es decir debe ejecutarse cuando se da clic en ese componente puesto en Control el codigo hecho en mi documento y además el codigo que el programador ponga en el evento OnClic
Aqui pongo un pedazo del programa

Código Delphi [-]
 
TMyComponente = class
private
 FControl: TWinControl;
 procedure ControlClick(Sender: TObject);
published
 property  Control: TWinControl read FControl write FControl; //Para asociar un componente 
visual
end;

TForm1= class(TForm)
 Panel1: TPanel;
 procedure Panel1Click(Sender: TObject);
end;

Quisiera que se ejecutara para el control asociado el codigo controlclick cuando se de click en el componente visual y además el evento ONClick de Panel1 Panel1Click.
Bueno cualquier idea que puedan darme se lo agradeceré.
Una vez mas muchas gracias por todo.
Responder Con Cita
  #2  
Antiguo 27-06-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Ya se ha hablado en alguna ocasión sobre esto en los foros. Básicamente lo que tienes que hacer es declarar una variable del tipo TNotifyEvent en tu componente. En esta variable guardas lo que tenga asociado el evento OnClick del control.

Algo así:

Código Delphi [-]
TMyComponent = class
private
  FOldOnClick: TNotifyEvent;

  procedure ControlClick(Sender: TObject);
protected
  procedure Loaded; override;
end;

implementation

procedure TMyComponent.ControlClick(Sender: TObject);
begin
  // Codigo a ejectuar
  if Assigned(FOldOnClick) then
    FOldOnClick(Sender)
end;

procedure TMyComponent.Loaded;
begin
  inherited;
  if not (csDesigning in ComponentState) and Assigned(FControl) then
  begin
    FOldOnClick := FControl.OnClick;
    FControl.OnClick := ControlClick
  end
end;


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #3  
Antiguo 27-06-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Aún así, es una práctica insegura. Si el programador, por la razón que sea, hace la asignación del evento en tiempo de ejecución, se da al traste con el comportamiento deseado de TMyComponent.

// Saludos
Responder Con Cita
  #4  
Antiguo 27-06-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Eso si, lo dicho por roman puede afectar al comportamiento del componente. Otra situación que no contempla el código que puse es si se cambia la propiedad Control (se asigna otro control) en tiempo de ejecución, pero eso se puede solucionar usando un "setter" para la propiedad.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #5  
Antiguo 27-06-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por maeyanes Ver Mensaje
pero eso se puede solucionar usando un "setter" para la propiedad.
¿Como éste?





// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Tomar evento de componente rhino0nt OOP 4 30-05-2011 17:06:19
Cómo saber el tipo de componente asociado a una DBGrid? gandalf_uy OOP 4 10-06-2010 20:27:18
Evento OnClick de un componente Edit xio Varios 5 24-11-2009 13:31:09
Sobreescribir evento en componente coso OOP 1 04-10-2008 16:15:56
Componente que ejecute más de una consulta? burasu Conexión con bases de datos 1 20-09-2004 18:16:14


La franja horaria es GMT +2. Ahora son las 10:45: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