FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Cómo acceder a las propiedades de un "Parent"
Hola nuevamente, pues estoy de regreso con una nueva duda, me disculpo si es que este hilo ya está abierto, pero no pude encontrar informacion que me sirviera para resolver mi problema.
Tengo un Formulario principal: "TFMain" Tengo un Formulario "TFImagen" que se creará en tiempo de ejecucion y se alojara en una nueva pestaña de un PageControl1 que está en "TFMain". Esto lo hago con el siguiente codigo:
y hasta ahi todo bien, puedo crear tantos Formularios "TFImagen" como yo quiera y puedo acceder a las propiedades de cualquier "TFImagen" desde "TFMain" con el siguiente codigo:
Pero el problema es cuando desde un "TFImagen" quiero acceder a las propiedades de "TFMain". y es que no puedo poner en el unit del formulario dinamico uses Main (que es el unit de TFMain) pk me marca un error por referencia circular, entonces como puedo acceder a las propiedades de mi formulario principal?? Dado que el padre de TFImagen es tabsheet, me imagino que primero debo acceder a tabsheet y luego al padre de tabsheet y asi hasta llegar al TFMain que es el formulario principal, pero pues no tengo ni idea de como hacer esto. Espero puedan ayudarme nuevamente, y gracias de antemano. |
#2
|
||||
|
||||
para evitar la referencia circular siempre puedes agregar a la unit que necesitas en el uses de la implementación (implementation). Con esto podras acceder a cuanquier metodo o funcion que se encuentre ahi.
Ahora, que puedas acceder no quiere decir que este bien. No tiene mucho sentido que tu imagen este accediendo al formulario principal. Si necesitas algo que esta ahi, lo mas probable es que ese metodo no este en el lugar correcto. Suerte
__________________
[Crandel] |
#3
|
||||
|
||||
Gracias por tu respuesta Crandel, si sé que probablemente no sea logica esta referencia circular, pero para ciertos propositos necesito hacerlo de esta manera por el momento. Lamentablemente no me sirvio la solucion que me diste para resolver el problema, pues solo puedo acceder a los constructores y las funciones, pero no puedo acceder a los componentes (Como el PageControl que tengo ahi) ni a las propiedades como color, caption, etc. Espero puedan darme otra solucion, gracias nuevamente
|
#4
|
||||
|
||||
Hola,
Pues creo que el asunto puede pasar por solucionar la referencia circular. Si el formulario "padre" expone una variable pública de su tipo, creo que tal vez no fuera mala idea acceder a ella, pero, para eso es preciso que dicha variable sea accesible desde el formulario "Imagen". Porque reescribir el constructor del formulario imagen, de forma que se le pase tal vez una referencia de la instancia del formulario "padre", de modo que pueda guardarla y usarla cuando le sea menester, esto, digo, ¡oyes! Pues a lo mejor es otra posibilidad... |
#5
|
||||
|
||||
Cita:
¿Para qué necesitas acceder al TFMain?, ¿exactamente qué quieres consultar o modificar?. El tema de referencias circulares indica un mal diseño. Si te empeñas en seguir por ese camino, enredarás mucho las cosas, tanto que después no sabrás qué demonios hace tu aplicación. Creo que los tiros van por crear un evento personalizado, pero hasta que no te expliques, no lo puedo confirmar. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 12-02-2008 a las 00:27:28. |
#6
|
||||
|
||||
Hola,
Cita:
|
#7
|
||||
|
||||
Bueno, explicaré como se originó el meollo del asunto. En un inicio necesitaba un panel transparente eficiente, que actuara como la transparencia de un TLabel, es decir, que no importara lo que tuviera atras, siempre iba a ser transparente el fondo, esto es por cuestiones de estetica, pues quería crear un dock parecido al de Mac Os Leopard. pero lamentablemente no pude encontrar un panel transparente, asi que lo hice con elementos TImage, y funcionaba bastante bien, el problema es que los TImage no quedan por encima de un Scrollbox o de un PageControl sin pertenecer a este. por eso puse este "dock" en el formulario "TFImagen", y ahi la razon de pk quiero hacer la referencia circular.
Si tuviera el panel transparente todos esos detalles de mal diseño se solucionarían, pero como aun no lo tengo y apenas estoy leyendo sobre como hacer componentes, pues va un poco para largo el asunto. Tambien probé el panel transparente de este hilo, pero no es tan potente pues cada que creo un nuevo tabsheet en el PageControl, me pone en el fondo el Panel y no hay manera de traerlo al frente. Asi que si no hay mas remedio pues tendré que eliminar la referencia circular y cambiar mi "dock" por una simple barra de herramientas. Aunque sigo escuchando sugerencias. Ah y gracias nuevamente por sus sugerencias. Todas son de gran utilidad para resolver uno u otro problema |
#9
|
||||
|
||||
Creo que estas intentando decirme algo, ¿Dock no era el de Regreso al futuro?
No conozco el dock del Mac Os Guepardo, pero no tienes el problema que yo pensaba. Crea una nueva unidad (sin form asociado) y en ella crea varias rutinas para crear y modificar el Parent o lo que sea. Al tener 3 unidades, se hace más difícil las referencias circulares. Más o menos:
En el Implementation uses de TFmain y UFImagen, añadimos el Unit3. La cosa queda: Umain hace uso de UImagen en el interface Umain hace uso de Unit3 en el implementation UImage hace uso de Unit3 en el implementation, para llamar a las rutinas que modifican las propiedades del padre. Espero que no me equivoque Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#10
|
||||
|
||||
No obtuve mi efecto deseado, pero funciona mi programa
Gracias Lepe por tu respuesta. Efectivamente "Doc" era el cientifico medio loco de volver al futuro, pero al que yo me refiero es a un "dock" con k al final, lo que pasa es que no se su nombre en español. Es esa barrita transparente que parece de cristal en donde se ponen accesos directos para las aplicaciones en el nuevo Mac OSX Leopard, pero bueno, eso ya es punto y aparte.
Tu sugerencia de agregar una tercera Unit es bastante mas funcional pues puedo mantener una mejor organizacion del programa y ademas se facilita el mantenimiento. Asi que al final opté por eliminar completamente las referencias circulares para propositos de buen diseño y agregar una Unit sin Form asociado para llevar mejor el control. Gracias a todos por sus sugerencias y comentarios, aunque si saben de algun buen Panel Transparente, les estaría mas que agradecido. |
#11
|
||||
|
||||
Hola,
Supongo que las conoces, pero, en sitios web como Torry's Delphi Pages o Delphi Super Pages tal vez encuentres lo que necesitas. |
#12
|
||||
|
||||
Ah, vale, en Español sería así como "barras de herramientas adosables" (del verbo adosar), ya que se adhieren a los bordes de pantalla o a un control anfitrión (dockHost).
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#13
|
||||
|
||||
En Visual Studio, la propiedad Dock es el equivalente a Align de Delphi
__________________
[Crandel] |
#14
|
||||
|
||||
Gracias Dec por las sugerencias, en Torry's Delphi Pages ya busqué y existen algunas versiones, pero funcionan solo para casos en particular, y Delphi Super Pages no la conocía, pero voy a buscar, aunque un campo para busqueda no les vendría mal, pues tienen demasiada informacion como para buscar manualmente, pero bueno, espero que ahi se encuentre la solucion. Aunque no comprendo pk nadie ha hecho un panel transparente completamente funcional, tan dificil es de programar componentes?? Yo tenía la idea de ver como hace la transparencia un TLabel y eso mismo aplicarselo a un TPanel, pero no se si sea dificil. Ja, pero creo que esté hilo se está cambiando mucho de tema y eso no es bueno no?
Última edición por NeoAnderson fecha: 12-02-2008 a las 20:47:55. |
#15
|
|||
|
|||
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Como cambiar valores en la ventana "General" propiedades del sistema | JuanErasmo | API de Windows | 52 | 17-02-2012 17:42:20 |
Comentario "aplastante" contra los que atacan la "piratería" | Casimiro Notevi | La Taberna | 12 | 07-03-2010 14:03:02 |
Como hacer que se vea "Si" en vez de "TRUE" en un DBGrid | lu9eui | C++ Builder | 2 | 07-08-2007 04:03:13 |
Necesito llamar a métodos de clases "hija" desde su clase "padre" | Flecha | OOP | 17 | 20-04-2007 00:03:53 |
|