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 30-05-2003
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 21
hgiacobone Va por buen camino
Arrow Nuevo evento

Que tal amigos...

Tal vez esta sección del foro sepa la respuesta.
¿Es posible adicionarle un evento a un componente?

La cosa es así: el componente nativo TAnimate para mostrar archivos AVI tienen pocos eventos (los necesarios) como OnShow y OnHide entre otros.

Yo necesito responder a la acción de acer Click sobre éste, o sea, generar un evento OnClick y atender a este.

¿Cómo se hace?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #2  
Antiguo 30-05-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 22
Kafu Va por buen camino
Sí que lo es. Es relativamente sencillo, lo complicado puede ser elegir en qué momento dispararlo. Un evento es una propiedad de tipo procedure of object. Puedes poner a tu componente una propiedad de tipo tnotifyevent directamente o crearte un tipo
type
procedure (sender: tobject; parametros.... ) of object
Luego en la parte que elijas del componente lo disparas. Normalmente se hace en función de algún mensaje recibido o en el método set de alguna propiedad.
Esto no es para explicarlo en cuatro líneas. Te recomiendo rastrear la VCL por ejemplo mirando el onclick de un tcontrol. Es como se aprende. Un saludo,






F.T.G.
Responder Con Cita
  #3  
Antiguo 30-05-2003
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 21
hgiacobone Va por buen camino
Cita:
Posteado originalmente por Kafu
Es relativamente sencillo, ...
F.T.G.
Que? !!!
Gracias por tu respuesta, pero sinceramente no entendí nada de lo que dijite.
¿Me podés hacer un ejmplo con el TAnimate, así es más fácil?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #4  
Antiguo 30-05-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Lo que dijo Kafu, es que es muy fácil definir un evento, pero hay que saber cuando dispararlo, de nada sirve tener eventos que nunca se disparen:

Código:
  TMiClase = class(TWinControl)
  private
    FMiEvento : TNotifyEvent;
  published
    property MiEvento : TNotifyEvent read FMiEvento write FMiEvento;
  end;
Viendo la herencia del TAnimate, se puede ver que viene de TControl, y TControl tiene definido el evento OnClick pero no lo tiene publicado, entonces podemos hacer lo siguiente:

Código:
  TMiAnimate = class(TAnimate)
  published
    property OnClick;
  end;
Como no lo he probado, no te garantizo de que se dispare el evento, Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 30-05-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 22
Kafu Va por buen camino
Disculpa mi forma de expresarme, tengo la capacidad de embrollar lo sencillo (es que soy de letras).
El camino que te indica Delphi.com.ar es el apropiado, diría yo.
Al publicar esa propiedad-evento ya no necesitas crearte uno nuevo. No te puedo decir si el animate responderá como tcontrol al hacer click y disparará el doclick, pero si no es así (yo tampoco lo he probado), rastrea el doclick o doonclick en tcontrol a ver cómo y en qué circunstancias es disparado.
Espero no haberte liado más, un saludo,
Responder Con Cita
  #6  
Antiguo 21-07-2003
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 21
hgiacobone Va por buen camino
Cita:
Posteado originalmente por delphi.com.ar
Viendo la herencia del TAnimate, se puede ver que viene de TControl, y TControl tiene definido el evento OnClick pero no lo tiene publicado, entonces podemos hacer lo siguiente...
Como no lo he probado, no te garantizo de que se dispare el evento, Saludos!

Yo lo he intentado, puse sobre un Form vacío un TAnimate con su animación ya caragada como correspnde y declaré la otra variable para capturar el evento pero no me funciona. Por favor, fijate el código y orientame porque no entiendo.

Código:
type
  TForm1 = class(TForm)
    Animate1: TAnimate;
    procedure Anima1Click(Sender: TObject);
  private
  public
  end;

  TMiAnimate = class(Animate1)
  published
    property OnClick;
  end;

var
  Form1: TForm1;
  Anima1: TMianimate;

implementation
{$R *.dfm}

procedure TForm1.Anima1Click(Sender: TObject);
begin
       showmessage('Pum...!');
end;
end.
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·

Última edición por hgiacobone fecha: 21-07-2003 a las 22:48:12.
Responder Con Cita
  #7  
Antiguo 21-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Es que la idea no es heredarlo de tu form, sino del TAnimate... Si lees atentamente lo que he escrito anteriormente esta todo dicho!
Puedes crearlo en tiempo de ejecución si es que no quieres registrar un componente nuevo, haciendo algo como esto:
Código:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls;

type
  TForm1 = class(TForm)
    Animate1: TAnimate;
    procedure FormCreate(Sender: TObject);
  private
    procedure MiAnimateClick(Sender: TObject);
  public
  end;

  TMiAnimate = class(TAnimate)
  published
    property OnClick;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  Animate1: TMiAnimate;
begin
  Animate1 := TMiAnimate.Create(Self);
  with Animate1 do
  begin
    Parent := Self;
    CommonAVI := aviCopyFile;
    OnClick := MiAnimateClick;
    Active := True;
  end;

end;

procedure TForm1.MiAnimateClick(Sender: TObject);
begin
  ShowMessage('Pum...!');
end;

end.
Y sinó puedes hacer un cast de tu TAnimate a TMiAnimate, va a funcionar pero no soy muy partidario de este tipo de prácticas

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
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


La franja horaria es GMT +2. Ahora son las 23:44:05.


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