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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-07-2014
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 22
hgiacobone Va por buen camino
Question Evento OnClick en runtime

Tal vez sea la pregunta del millón...
¿ Cómo disparar dinámicamente (runtime) un evento OnClick ?

Ejemplo:
Tenemos un procedimiento que en runtime crea un formulario, un Memo y un Boton.
El fin de esto, es que, el usuario final escriba algo en el Memo y al hacer clic en el Boton lo pueda enviar a imprimir o a realizar otro tipo de tarea (en este caso no importa mucho).
El código es similar a esto:
Código Delphi [-]
procedure TForm1.MostrarFormularioDinamico;
var
  DebugForm: TForm;
  memo1: TMemo;
  Btn1: TButton;
  Pnl1: TPanel;
begin
    DebugForm:= TForm.Create(self);
    DebugForm.Width:= Trunc(Self.Width/2);

    Pnl1:= TPanel.Create(DebugForm);
    Pnl1.Parent:= DebugForm;
    Pnl1.Align:= alBottom;

    Btn1:= TButton.Create(DebugForm);
    Btn1.Parent:= Pnl1;
    Btn1.OnClick:= ClickMe; //<----este es el problematico

    memo1:= Tmemo.Create(DebugForm);
    memo1.Parent:= DebugForm;
    memo1.Align:= alClient;
    memo1.ScrollBars:= ssBoth  ;

    DebugForm.Show;
end;

Por lo general, el evento se declara en el formulario principal, en su sección privada y funciona correctamente (mientras se haga referencia a componentes, procedimientos, variables, etc, que sean visibles al TForm principal):
Código Delphi [-]
type
  TForm1 = class(TForm
  ...
  ...
  private
    procedure ClickMe(Sender : TObject);
  published
  end;

El problema reside es que a este evento no lo puedo asignar a un procedimiento "pre-declarado" ya que hace referencia y uso de elementos que se crean dinámicamente tal como el TMemo.
Tampoco fue posible dispararlo con un procedimiento local, al estilo:
Código Delphi [-]
procedure TForm1.MostrarFormularioDinamico;
var
  DebugForm: TForm;
  memo1: TMemo;
  Btn1: TButton;
  Pnl1: TPanel;
      
      procedure ClickMe(Sender: TObject);
      var
        s: string;
      begin
            try   
              s:= memo1.Text;
              ...
              ...
            except
              on E:Exception do MessageDlg(E.Message, mtWarning, [mbOk],0);
            end;
      end;

begin
    DebugForm:= TForm.Create(self);
    DebugForm.Width:= Trunc(Self.Width/2);

    Pnl1:= TPanel.Create(DebugForm);
    Pnl1.Parent:= DebugForm;
    Pnl1.Align:= alBottom;

    Btn1:= TButton.Create(DebugForm);
    Btn1.Parent:= Pnl1;
    Btn1.OnClick:= ClickMe; 

    memo1:= Tmemo.Create(DebugForm);
    memo1.Parent:= DebugForm;
    memo1.Align:= alClient;
    memo1.ScrollBars:= ssBoth  ;

    DebugForm.Show;
end;

¿ Alguien tiene alguna aproximación para su solución ?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
 



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 Dbctrlgrid Choclito OOP 2 13-05-2013 00:30:31
evento onclick del button richard187 OOP 8 08-04-2008 04:01:59
evento OnClick de un TRichEdit aranel OOP 4 01-12-2005 11:43:28
Evento OnClick vtdeleon OOP 4 08-08-2005 23:40:18
Evento onClick jzk OOP 4 27-10-2004 18:46:02


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