FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 ). Un saludo.
__________________
Óscar Salvador Páez Aprendiendo a aprehender de quienes aprehenden, sin cerciorarse de sus edades, culturas, sexos, razas, creencias u orígenes, es la forma más sabia de aprehender.
|
#2
|
||||
|
||||
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. |
#3
|
||||
|
||||
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 |
#4
|
|||
|
|||
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.
__________________
Óscar Salvador Páez Aprendiendo a aprehender de quienes aprehenden, sin cerciorarse de sus edades, culturas, sexos, razas, creencias u orígenes, es la forma más sabia de aprehender.
|
#5
|
||||
|
||||
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.
|
#6
|
||||
|
||||
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 |
#7
|
||||
|
||||
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.
__________________
todo el mundo debe creer en algo... yo creo que voy a tomarme otra copa. |
#8
|
||||
|
||||
Cita:
Cita:
Cita:
Cita:
// Saludos |
#9
|
||||
|
||||
!_! 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.
__________________
todo el mundo debe creer en algo... yo creo que voy a tomarme otra copa. |
#10
|
||||
|
||||
Cita:
// Saludos |
|
|
|