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 15-09-2015
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
Enlazando un evento OnClick a mi componente

Hola, tengo la siguiente definición de una clase que implementa un 'componente' y no sé que debo hacer para enlazar el OnClick del botón:

Código Delphi [-]
  TPruebaOnClic = class(TControl)
  private
    FRectang: TRectangle;
    FBoton: TButton;
    FOnClic: TNotifyEvent;
  public
    constructor Create(AOwner: TFmxObject);

    property OnClicBoton: TNotifyEvent read FOnClic write FOnClic;
  end;

constructor TPruebaOnClic.Create(AOwner: TFmxObject);
begin
  FRectang := TRectangle.Create(AOwner);
  with FRectang do
  begin
    Parent := AOwner;
    Align := TAlignLayout.Client;
    Opacity := 0.8;
  end;

  FBoton := TButton.Create(AOwner);
  with FBoton do
  begin
    Parent := FRectang;
    Align := TAlignLayout.Center;
    OnClick := FOnClic;
    Visible := True;
  end;
end;

Ahora desde la aplicación que usa el 'componente' ...

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Boton := TPruebaOnClic.Create(Panel1);
  Boton.OnClicBoton := OnClicOpc1;
end;

procedure TForm1.OnClicOpc1(Sender: TObject);
begin
  showmessage('estamos en grabar trabajo');
end;

Al ejecutarla, se muestra el rectángulo con el botón, pero no se ejecuta el evento al hacer clic sobre el botón.

No se hace de esa manera ...?

Gracias.

GustavoSV
Responder Con Cita
  #2  
Antiguo 16-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
TControl no publica el evento OnClick?

No tengo el Delphi a mano para verificarlo, en ese caso no hace falta que agregues el evento, con sólo publicar la propiedad OnClick ya este

Si en TControl no tiene el evento te conviene heredar de otro control que lo tenga
Responder Con Cita
  #3  
Antiguo 16-09-2015
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
Hola Agustín, gracias por tu respuesta, tienes razón, pero para obtenerlo necesitaría publicar todo el botón, y lo que quiero es solo dejar disponible el evento OnClick del botón.
Responder Con Cita
  #4  
Antiguo 16-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
No entendi eso de publicar todo el boton

Revisa este codigo:


Código Delphi [-]
unit Unit2;

interface

uses
  Vcl.Controls;

type
  TNothing = class(TControl)
  public
    property OnClick;
  end;

implementation

end.

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Nothing := TNothing.Create(Self);
  Nothing.Parent := Self;
  Nothing.Align := alClient;
  Nothing.OnClick := NothingClick;
end;

procedure TForm1.NothingClick(Sender: TObject);
begin
  ShowMessage('click on nothing');
end;
Responder Con Cita
  #5  
Antiguo 16-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Releyendo tu ejemplo, lo que tenes que hacer es proveer una propiedad que mapee al OnClick del boton:


Código Delphi [-]
property OnClick: TNotifyEvent read GetOnClick write SetOnClick;

function GetOnClick: TNotifyEvent;
begin
  Result := FBoton.OnClick;
end;

procedure SetOnClick(const Value: TNotifyEvent);
begin
  FBoton.OnClick := Value
end;
Responder Con Cita
  #6  
Antiguo 16-09-2015
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
me refiero a publicar solo el evento OnClick del botón:
Código Delphi [-]
TNothing = class(TControl)
private
  FPanel: TPanel;
  FBoton: TButton;
public   
  property OnClick; ??? 
end;
Responder Con Cita
  #7  
Antiguo 16-09-2015
gustavosv gustavosv is offline
Miembro
 
Registrado: mar 2008
Posts: 51
Poder: 17
gustavosv Va por buen camino
jajaja ... nos cruzamos por 1 minuto los post ...

Gracias Agustín, ahora si ya funcionó como es.

Saludos,

GustavoSV

Última edición por gustavosv fecha: 16-09-2015 a las 03:06:05.
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
Evento OnClick en runtime hgiacobone OOP 5 31-07-2014 11:22:18
evento onClick a componente que no lo tiene locojoan API de Windows 2 20-09-2010 11:40:13
Evento OnClick de un componente Edit xio Varios 5 24-11-2009 13:31:09
Evento OnClick vtdeleon OOP 4 09-08-2005 00:40:18
Evento onClick jzk OOP 4 27-10-2004 19:46:02


La franja horaria es GMT +2. Ahora son las 17:04:45.


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