Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-03-2004
Diegoval Diegoval is offline
Miembro
 
Registrado: mar 2004
Ubicación: Buenos Aires, Argetina
Posts: 16
Poder: 0
Diegoval Va por buen camino
El problema era otro

Muchas gracias a todos por responderme, pero la verdad es que el problema era otro...

Todo eso que me dijeron yo lo había probado (eso de jugar con los parents) pero me lo seguia sin mostrar como mínimo, pues hasta en algunos casos hasta me tiraba error . Lo que dice jachguate es totalmente verdadero, el componente no sirve para nada y se podría haber hecho uno que herede de TPanel y tocar su propiedad Caption, pero el tema es que yo lo estoy haciendo mas que nada para aprender y no sabía porque no se mostraba, hasta que me mandaron una erspuesta de otro foro que me resultó:

El tema es que cuando le asigno las propiedades de Self.Top, Self.Left, etc. estas propiedades todavía no tienen un valor (ya que el componente se esta creando), solamente por eso es que no se mostraba, ya lo corregí y ahora funciona perfectamente...

Igualmente muchisimas gracias a todos, nuevamente.
Responder Con Cita
  #2  
Antiguo 26-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.938
Poder: 27
delphi.com.ar Va por buen camino
Me parece que estas cometiendo un error al hacer:
Código:
pnlFondo.Top := Self.Top;
pnlFondo.Left := Self.Left;
pnlFondo.Height := Self.Height;
pnlFondo.Width := Self.Width;
Posiblemente lo que quieras hacer es:
Código:
pnlFondo.Top := 0;
pnlFondo.Left := 0;
pnlFondo.Height := Self.Height;
pnlFondo.Width := Self.Width;
Recuerda que este componente esta contenido por el Self.

Otra opción puede ser trabajar con BoundsRect y ClientRect o con la propiedad Align := alClient!

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 26-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
Recuerda que este componente esta contenido por el Self.
¡Pero de aquí parte la confusión! No puede estar contenido en Self ya que Self es un derivado de TLabel y TLabel no es un contenedor. Quizá redefiniendo ValidateContainer pero realmente dudo que tal sea la intención, ¡¿un panel dentro de un label!??

// Saludos
Responder Con Cita
  #4  
Antiguo 26-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.938
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
¡Pero de aquí parte la confusión! No puede estar contenido en Self ya que Self es un derivado de TLabel y TLabel no es un contenedor. Quizá redefiniendo ValidateContainer pero realmente dudo que tal sea la intención, ¡¿un panel dentro de un label!??
Eso me pasa por no haber leído todo el hilo, mismo ahora me doy cuenta que ya lo solucionó!

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 26-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
Eso me pasa por no haber leído todo el hilo, mismo ahora me doy cuenta que ya lo solucionó!
¡Vaya! Pues yo ahora me doy cuenta de esto. Juro que al dar click en "Ir al primer mensaje nuevo" me llevó al tuyo y no al de él.

De cualquier manera ya haré la prueba pues realmente me intriga ver qué aspecto tiene una cosa así.

Para Diegoval que dijo:

Cita:
Empezado por Diegoval
ya lo corregí y ahora funciona perfectamente
¿Y te importaría corresponder a la ayuda exponiendo la solución?

// Saludos
Responder Con Cita
  #6  
Antiguo 26-03-2004
Diegoval Diegoval is offline
Miembro
 
Registrado: mar 2004
Ubicación: Buenos Aires, Argetina
Posts: 16
Poder: 0
Diegoval Va por buen camino
Ahora entiendo menos...

El tema es el siguiente:

El ejemplo que yo puse (un TLabel con un TPanel) es medio tonto y la verdad es que por si no funciona para nada... pero me sierve para probar como hacer para crear un componente visual dentro de otro tambien visual... por ejemplo...

Yo quiero hacer un componente que represente un cuadrado dentro de otro y luego unir los vertices superior izuierdo del mas grande con un superior izquierdo del mas chico y asi...(lo que simularía un diente en la planilla odontológica) para despues capturar el mensaje click y hacer lo que corresponda segun en que area del diente clickee... ahora viene el problema de cómo hacerlo.
A mi se me ocurrio heredar de un TShape y luego crear otro TShape para ponerlo dentro y luego hacer las lineas que unan los vértices. Bueno, el tema es que se cómo hacer para crear un componente desde otro componente, o sea, la pregunta sería como hacer para hacer eso?

Lo anterior (del componente TLabel y el TPanel) lo solucioné asignando las propiedades Left, Top, etc. del panel en el evento Paint del Label y no en el Create. (Igualmente no me funcionó del todo bien, seguramente no se debe hacer asi...)

La verdad me parece tan sencillo que no se por qué no me sale, pero tampoco se me ocurren soluciones alternativas para crear un diente...!!!
Responder Con Cita
  #7  
Antiguo 26-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Permíteme hacerte unos comentarios:

De verdad me parece estupendo que desees aprender y siempre es útil trabajar a prueba y error- a veces no queda más remedio. Pero también es muy recomendable que se tome uno un tiempo alejado del ordenador para leer la documentación.

En tu caso, ya que deseas escribir componentes te recomiendo que leas el apartado Component Writer's Guide. No se trata de que lo entiendas todo de una sóla vez pero sí de que te des una idea del tipo de cosas que se involucran.

Por ejemplo, encontrarás ahí la información acerca del método Loaded, que sirve precisamente para inicializar valores que dependen de que las propiedades de la componente ya estén cargadas.

Asímismo te darás una idea general de que son los controles contenedores y porque entonces no es una buena idea tratar de meter una componente en un TLabel.

// Saludos
Responder Con Cita
  #8  
Antiguo 28-03-2004
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Diegoval
...cuando le asigno las propiedades de Self.Top, Self.Left, etc. estas propiedades todavía no tienen un valor (ya que el componente se esta creando), solamente por eso es que no se mostraba...
Tienes razón . Al llamar al constructor heredado:
Código:
Constructor TLabelTimer.Create(AOwner : TComponent);
Begin
inherited Create(AOwner);
se inicializa el objeto etiqueta a Left = 0, Top = 0, Width = 65 y Height = 17:
Código:
constructor TCustomLabel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csReplicatable];
  Width := 65;
  Height := 17;
...
Por lo cual, el objeto TPanel toma las dimensiones iniciales de la etiqueta. Sin embargo, la sentencia
Código:
pnlFondo.Parent := Self.Parent;
le asigna un valor de Nil a la propiedad Parent del objeto TPanel, debido a que en ese momento Selft.Parent (o simplemente "Parent"), es decir, la propiedad Parent de la etiqueta, aún no tiene valor asignado. Si tal etiqueta es un control agregado a una forma en tiempo de diseño, entonces será hasta que el componente se cargue, cuando le sea asignado un valor (esto es después de la construcción).


Cita:
Empezado por roman
...te darás una idea general de que son los controles contenedores y porque entonces no es una buena idea tratar de meter una componente en un TLabel...
De hecho Diegoval no pretendía meter el objeto panel dentro del objeto etiqueta. Sólo los objetos derivados de TWinControl (TLabel no lo es) son asignables a la propiedad Parent de los componentes controles (derivados de TControl).


¡Hasta pronto!

Al González .

Los negocios se deben ajustar a las capacidades humanas, no las capacidades humanas a los negocios. Por una vida laboral sana .
Responder Con Cita
  #9  
Antiguo 28-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Al González
De hecho Diegoval no pretendía meter el objeto panel dentro del objeto etiqueta. Sólo los objetos derivados de TWinControl (TLabel no lo es) son asignables a la propiedad Parent de los componentes controles (derivados de TControl).

De hecho sí es lo que pretendía y de ahí las recomendaciones de cadetill y mia.

// Saludos
Responder Con Cita
  #10  
Antiguo 29-03-2004
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile Aclaración

¡Hola a todos!

Román:

Me refiero a que no pretendía meterlo visual y formalmente hablando. Es decir, en ningún momento parece haber intentado que el objeto etiqueta fuera el contendor del objeto panel (como tu lo señalas).

Si revisas de nuevo su código y comentarios, notarás que Diegoval intentaba crear un objeto TPanel dentro de (junto con) la creación del objeto etiqueta, para que la etiqueta estuviese acompañada de un panel con la misma posición, tamaño y contenedor padre. Un reloj con realse por sobreposición visual de controles.

De cualquier manera, reconozco que el tema presentó algunos nudos de confusión, y que tratándose de creación de controles, palabras como dentro se prestan a diversas interpretaciones.

Un abrazo.

Al González .
Responder Con Cita
  #11  
Antiguo 29-03-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Je, je, tienes toda la razón Al. Creo que este hilo fue demasiado largo y terminé confundiéndome con mis propias indicaciones

// Saludos
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


La franja horaria es GMT +2. Ahora son las 09:41:06.


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