Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Derivar Componente (https://www.clubdelphi.com/foros/showthread.php?t=49207)

cacu 16-10-2007 05:53:45

Derivar Componente
 
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

Código Delphi [-]
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

Cita:

Empezado por cacu (Mensaje 238768)
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:

Código Delphi [-]
  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í:

Código Delphi [-]
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

Cita:

Empezado por José Luis Garcí (Mensaje 238852)
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 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

Componente
 
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.


La franja horaria es GMT +2. Ahora son las 07:41:36.

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