Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Detectar la creación de un formulario (https://www.clubdelphi.com/foros/showthread.php?t=71103)

Estifmauin 30-11-2010 22:34:10

Detectar la creación de un formulario
 
Hola a todos.
Estoy desarrollando una aplicación con un montón de formularios, y en tiempo de diseño pongo comodines que en runtime deben ser substituidos por otras cadenas:
Ejempo: en un Caption de un botón pongo 'Dar de baja el {artículo}', pero en runtime debe cambiar a 'Dar de baja el chisme' o 'Dar de baja el armatoste' en función del perfil del usuario que lo está utilizando.

Actualmente en cada evento FormCreate llamo a un método que hace este trabajo, y a otros que colorean los formularios y cambian las fuentes... pero eso me obliga a escribir todas las llamadas en cada unit de cada Form.
Odio hacer trabajos repetitivos, pero como me preocupa olvidarme de ponerlo, cada 2 x 3 me encuentro repasando todo el código.

¿Conocéis alguna manera de que mi aplicación me notifique que un nuevo formulario ha sido creado, y lance algún evento para que pueda hacerle mi tratamiento de belleza al formulario recién creado?
Me sorprende que el objeto Application no disponga de algo así.
¿Tal vez una función de Callback?

Gracias de antemano.

rgstuamigo 30-11-2010 22:54:20

Cita:

Empezado por Estifmauin (Mensaje 383691)
...
Actualmente en cada evento FormCreate llamo a un método que hace este trabajo, y a otros que colorean los formularios y cambian las fuentes... pero eso me obliga a escribir todas las llamadas en cada unit de cada Form.
Odio hacer trabajos repetitivos, pero como me preocupa olvidarme de ponerlo, cada 2 x 3 me encuentro repasando todo el código.

Y por qué no usaste herencia visual para eso y te olvidas de estar programando la misma cosa para cada formulario.;)
Saludos...:)

LoPiTaL 01-12-2010 00:06:32

De hecho no hace falta ni siquiera herencia visual. Simplemente crea una clase que derive de TForm y todos tus formularios que deriven de esta nueva (no hace falta ni siquiera que tenga formulario, ni que modifiques los que ya tienes) y en ella sobreescribes el método Create, o si es demasiado pronto (si tienes que inicializar cosas y tal), sobreescribes el AfterCreation, que se encargue de llamar a quien tenga que llamar.

Un saludo,
LoPiTaL

JoseAntonio 02-12-2010 16:16:16

Quizas programas demasiado rapido y no te das tiempo de verificar tus propios programas, tomate tu tiempo esto no es una competencia ;) :D

Estifmauin 05-12-2010 16:21:49

Vale... herencia visual. Nunca lo he usado, y por lo que he visto es algo muy potente, aunque no se ajusta a las necesidades de este proyecto concreto.
Además, si no he entedido mal lo que he ojeado, eso me obliga de nuevo a revisar todas las units de las pantallas para redeclararlas. Y de nuevo me encuentro con el problema de poder olvidarme en algún caso. Se trata de una app con 93 formularios (y creciendo).

Lo que me proponéis esta bien, es un campo que me puede ayudar en futuros desarrollos, pero ahora me sería muy útil conseguir lo que planteo al inicio, es decir, simplemente que mi aplicacion lanze un evento diciéndome que se ha creado un nuevo formulario de la clase X. En función de si es un mantenimiento, hacer una cosa, si es un report hacer otra, si se trata de un diálogo, otra distinta. Tiro de RTTI, y le aplico los cambios oportunos a sus componentes. Además, en algunas de ellas, necesito hacer una estadística de uso x usuario, y en otros casos, lanzar un timer que la bloquea al cabo de unos minutos, tembién traducciones...

En fin... que lo que necesito es algo muy concreto.
¿A alguen se le ocurre la manera de hacerlo?

Y aquí quiero hacer una aclaracion para JoseAntonio:
Si. Trabajo muy deprisa, es lo que impone la empresa para la que trabajo, me gustaría hacerlo con toda la calma, investigando la manera mas eficiente de implementar cada mejora. También me gustaría que me pagasen un super-curso de técnicas avanzadas, pero en 5 años no me han pagado ni un café.
A veces, en mi tiempo libre, o cuando hago mis "chapuzillas", programo con más calma, intentando aprender cosas nuevas, ya que tengo una gran curiosidad y no me da miedo enfrentarme a lo nuevo.
Pero si, lo normal es que trabaje con unos plazos bastante ajustados. Hago lo que puedo, y sólo compito con mi tiempo.
Sé que intentas ayudar, pero por favor, no seas pedante.



LoPiTaL 05-12-2010 21:04:17

Pues así a priori no se me ocurre ninguna forma de detectar creación de formularios sin introducir ninguna clase intermedia, así que (si nadie dice ninguna técnica diferente) te tocará revisar uno por uno todos los formularios que lleváis creados. Creo que sólo puedes detectar formularios cuando se abren (no cuando se crean) en modo modal, mediante un evento del objeto Application. Tal vez te pudiese valer, pero te recomiendo que pierdas cierto tiempo revisando todos los forms.
Lo ves como algo malo (y es cierto, si son casi 100...), pero piénsalo como una mejora, y que, más adelante, posiblemente necesites algo nuevo que necesiten todos ellos y volverás a estar en la misma situación, así que, tarde o temprano, terminarás necesitándolo, así que más vale ahora que son 100, que después que serán 200.
Tal como lo veo, sólo necesitas en todos los formularois cambiar la declaración y ya está, SIN NECESITAR MODIFICAR FORMULARIOS. Después insertar la nueva clase que sobreescriba el método Create. Tal vez te lleve unas (dos?, tres?) horas revisar todos los formularios, así que tampoco va a ser tanto suplicio (una mañana o así) y, para más adelante, ya estarás en disposición de insertar cualquier mejora de golpe para todos los formularios (sobreescribiendo funciones, insertando nuevas, etc...).

Un saludo,
LoPiTaL


La franja horaria es GMT +2. Ahora son las 05:38:50.

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