Método accesible desde varios controles en diferentes forms
Muy buenas.
Quisiera saber si hay alguna forma de crear un método que se pueda asignar a un evento (OnKeyPress, por ejemplo) de varios controles (TEdit, p.ej.) desperdigados por varios Formularios ó Units, ya sea creándolo en una clase para éste propósito ó como un método aislado (no sé si habré dicho alguna burrada que rompa con las reglas de la POO :eek:). Un saludo. |
Hola, para esto hay 2 soluciones (o más, pero no se me ocurren ;))
1) Crear un descendiente de la clase del componente que quieres y sobreescribir el método en cuestión. Esto implica que, si quieres asignar el mismo código al evento OnClick de objetos de distintas clases (TBitBtn y TButton), debes implementarlo en los descendientes que te crees de esas clases... Y si tienes que modificar el código de ese evento, debes hacerlo en todas las clases descendientes que hayas creado. 2) Crear un evento "genérico" con argumentos compatibles con el evento que deseas asignar, p.ej.: Esta 2ª opción sirve para objetos de distintas clases, p. ej., para un TBitBtn y un TButton (ambos tienen el evento OnClick con el mismo argumento). Y si tienes que modificar el código de ese evento, lo haces en un sólo sitio. Depende de tus necesidades ;) Salu2. |
Cita:
Lo que puede hacer en todo caso es:
El uso de class procedure es para no tener que crear un objeto de la clase TEventos. // Saludos |
Gracias roman, eso es justo lo que necesitaba. Gracias también a defcon1_es por intentarlo, yo estaba parado justo donde roman nos corrigió.
Saludos. |
Hola Roman,
se me olvidó mencionar que el procedure "genérico" es del TForm1. Acabo de probar esto y el compilador no se queja... y funciona.
|
Si es de TForm1, entonces para referenciarlo sería algo así:
Lo que implica que form1 deberá estar instanciado para poder acceder a ese método. Si form1 es la forma Principal de la aplicación, sin problemas; pero si no lo es, empiezan los problemas. Saludos |
una vuelta mas de tuerca:
dado que lo único que necesitamos para asignar el evento es que le pasemos un "procedure of object" esto es, un método de un objeto en lugar de una función clásica, podemos hacer una clase dummy (que no haga nada) y para ahorrarnos la creación destrucción etc, hacer que el método sea un método de clase:
no pongo private ni public ni na porque los métodos de clase siempre son publicos. |
Cita:
Cita:
Cita:
Cita:
// Saludos |
!_! dios santo, estoy ciego!
xD que desastre soy, supongo que tanto leer entre lineas me ha producido el efecto inverso, osea, leer menos de lo que dice. Mil perdones. y respecto a lo de los métodos de clase ... me has hecho dudar y todo, quizas en otros lenguajes tipo java deje hacerlo pero en delphi la visibilidad de los métodos de clase es public siempre. ej.:
no solo no se queja el compilador, sino que se ejecuta sin problemas. |
Cita:
// Saludos |
La franja horaria es GMT +2. Ahora son las 08:54:00. |
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