Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2008
Avatar de NeoAnderson
NeoAnderson NeoAnderson is offline
Miembro
 
Registrado: feb 2008
Posts: 17
Poder: 0
NeoAnderson Va por buen camino
Question 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:

Código Delphi [-]
Unit Main;
interface
uses
/*....*/ UImagen; //Es el unit del formulatio TFImagen

/*etc, etc*/

procedure TFMain.Abrir1Click(Sender: TObject);
var aForm:TFImagen;
     tabSheet: TTabSheet;     
begin

   //crea una nueva pestaña
   tabSheet := TTabSheet.Create(PageControl1) ;
   tabSheet.PageControl := PageControl1;

   //crear un nuevo form
   aForm := TFImagen.Create(tabSheet) ;
   aForm.Parent := tabSheet;
   aForm.Align := alClient;
   aForm.BorderStyle := bsNone;
   aForm.Visible := true;
   PageControl1.ActivePage := tabSheet;   
   
end;

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:

Código Delphi [-]
(PageControl1.ActivePage.Controls[0] as TFImagen).PropiedadX;

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.
Responder Con Cita
  #2  
Antiguo 11-02-2008
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Lightbulb

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]
Responder Con Cita
  #3  
Antiguo 11-02-2008
Avatar de NeoAnderson
NeoAnderson NeoAnderson is offline
Miembro
 
Registrado: feb 2008
Posts: 17
Poder: 0
NeoAnderson Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 11-02-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 12-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por dec
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...
... pero sigue necesitando el uses, y vuelve a dar referencias circulares, incluso para hacer un posible moldeo de tipos.

¿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.
Responder Con Cita
  #6  
Antiguo 12-02-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Lepe
... pero sigue necesitando el uses, y vuelve a dar referencias circulares, incluso para hacer un posible moldeo de tipos.
Es cierto, pero, no tiene porqué darse una referencia circular. Si este es el caso, como tú dices, hay algo ahí que ya no es que debería, sino que tendría que plantearse de otro modo. Vamos, digo yo...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 12-02-2008
Avatar de NeoAnderson
NeoAnderson NeoAnderson is offline
Miembro
 
Registrado: feb 2008
Posts: 17
Poder: 0
NeoAnderson Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 12-02-2008
Avatar de NeoAnderson
NeoAnderson NeoAnderson is offline
Miembro
 
Registrado: feb 2008
Posts: 17
Poder: 0
NeoAnderson Va por buen camino
Perdon, en el mensaje anterior olvide poner la liga del panel transparente que probé. Es este
Responder Con Cita
  #9  
Antiguo 12-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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:
Código Delphi [-]
Unit unit3;

interface
 uses UImagen, UMain;

procedure ModificaFimagen(Form:TFMain; fImage:TFImagen);

implementation
procedure ModificaFimagen(Form:TFMain; fImage:TFImagen);

begin 

 Form.loquesea := ....
 fImage.blah_blah;
end;

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.
Responder Con Cita
  #10  
Antiguo 12-02-2008
Avatar de NeoAnderson
NeoAnderson NeoAnderson is offline
Miembro
 
Registrado: feb 2008
Posts: 17
Poder: 0
NeoAnderson Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 12-02-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Supongo que las conoces, pero, en sitios web como Torry's Delphi Pages o Delphi Super Pages tal vez encuentres lo que necesitas.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #12  
Antiguo 12-02-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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.
Responder Con Cita
  #13  
Antiguo 12-02-2008
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
En Visual Studio, la propiedad Dock es el equivalente a Align de Delphi
__________________
[Crandel]
Responder Con Cita
  #14  
Antiguo 12-02-2008
Avatar de NeoAnderson
NeoAnderson NeoAnderson is offline
Miembro
 
Registrado: feb 2008
Posts: 17
Poder: 0
NeoAnderson Va por buen camino
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.
Responder Con Cita
  #15  
Antiguo 12-02-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Cita:
Empezado por NeoAnderson Ver Mensaje
aunque un campo para busqueda no les vendría mal


Bye
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 20:37:18.


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
Copyright 1996-2007 Club Delphi