FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
||||
|
||||
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·.:*:.· |
#2
|
|||
|
|||
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. |
#3
|
||||
|
||||
Cita:
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·.:*:.· |
#4
|
||||
|
||||
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; Código:
TMiAnimate = class(TAnimate) published property OnClick; end;
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
|||
|
|||
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, |
#6
|
||||
|
||||
Cita:
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. |
#7
|
||||
|
||||
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. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
|
|
|