PDA

Ver la Versión Completa : Derivar Componente


cacu
16-10-2007, 05:53:45
Un grato saludo a todos los foristas
Estoy tratando de derivar un componente y poder modificar el evento onclik del TButton, que cuando se ejecute este evento me aparesca un mensaje ...

La cosa es que me confundo y no he podido dar con esto...
Sera posible que puedar darme una mano con esto

Se agradeceran sus comentarios

José Luis Garcí
16-10-2007, 08:48:42
Si lo que quieres es solo lanzar un mensaje al ejecutar el evento (ONclick) pon dentro el mensaje y la forma que desees y si lo que quieres crear un componente, haz lo mismo en el evento on click, para el primer caso te pongo un ejemplo de memoria

procedure miaplicacion.buton1OnClick(...)
begin
MEssagebeep(30); //Si quieres mandar un sonido
Showmessage('Hola Mundo'); //El mensaje
...... (resto de código)
end

Neftali [Germán.Estévez]
16-10-2007, 10:05:59
Estoy tratando de derivar un componente y poder modificar el evento onclik del TButton, que cuando se ejecute este evento me aparesca un mensaje...

Como ya te han dicho, para sacar un mensaje puedes usar el evento estandard del componente.
Si realmente necesitas derivarlo, entonces, en ese caso, nunca debes utilizar los eventos del componente, para eso debes utilizar métodos virtuales o mensajes.

En el caso de TButton, hay un evento que puedes sobreescribir:


procedure Click; override;


Crea este método en la parte public de tu componente y programa lo que necesites (no olvides de llamar al inherited); Algo así:


procedure TMiButton.Click();
begin
// Método heredado
inherited Click;
// Mostrar mensaje
... <= Tu mensaje
end;

José Luis Garcí
16-10-2007, 16:13:11
Bueno es que me corrigas Neftali, gracias a ello procurare no cometer ese error.

Neftali [Germán.Estévez]
16-10-2007, 17:20:33
Bueno es que me corrigas Neftali, gracias a ello procurare no cometer ese error.

Bueno, he de decir que mi afirmación no fue exacta 100%.
He leído mimensaje y creo que ha quedado un poco en el aire, así que intentaré explicarlo mejor.

(1º) Derivar un componente y utilizar (sobreescribir) eventos.
En el mensaje anterior dije que esto nunca se debía hacer; Tal vez debería haber dicho que no se debe hacer a no ser que no exista otra opción (NOTA1).
En problema de utilizar ventos, es que si lo hacemos tal cual y el programador final utiliza ese evento, se perderá la programación qu nosotros hemos hecho en el. Un evento no es más que un puntero a una función. Si utilizamos ese puntero corremos el riesgo de que el programador final lo vuelva a utilizar y ese único puntero llevará a su función en lugar de a la nuestra.
SOLUCIÓN: Si no hay otro remedio, lo que hay que hacer es crear un puntero auxiliar que apunte a la original y luego programar la nuestra; Y desde la nuestra llamar a la original.
En este hilo (http://www.clubdelphi.com/foros/showthread.php?t=40185&highlight=componente+evento) hay un par de ejemplos de cómo hacerlo explicados.

(2º) Qué utilizar en lugar de los eventos.
Lo normal es utilizar los métodos definidos como virtuales/abstract en las clases base (que son para eso) o capturar los mensajes de windows.
Si no hubiera métodos virtuales para sobreescribir, ni mensajes para capturar es el único caso en que se puede utilizar el método 1.

NOTA1: De todas formas comentar (es una opinión personal) que si llegamos al punto de necesitar usar el punto (1º), deberíamos plantearnos si el diseño del componente que estamos haciendo es el correcto.

cacu
17-10-2007, 16:34:00
Hola Foristas

En esta ocacion escribo para agradecer su colaboracion y acertividad, en especial Neftali quien atenido una volundad unica..

Sin mas y nuevamente agradiceindo vuestro apollo

cacu.-

Neftali [Germán.Estévez]
17-10-2007, 16:53:02
De nada Cacu.
Sería bueno, para futuras búsquedas y dudas de otros foristas, que explicaras cómo se ha solucionado el tema y el código final (aunque tú y yo ya sabemos por dónde han ido los tiros, así quedará claro también para los demás ;)).

Un saludo.