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-08-2004
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Cambiar el color de un componente nuevo

Hola quisiera saber si alguien conoce la manera de cambiar el color de un componente de nombre dxWinXPBar, este es un componente de la Free suite de componentes Design Experience (mas de alguno la de a conocer) y viene con el codigo fuente pero al ponenrlo en una form como q no se ve bien el azul con el color de las formas. Cheque el codigo fuente, pero no vi donde modificar el color, ya que esto no es posible desde las propiedades publicadas en el Object Inspector.

Si es posible hacerlo agradecere los tips.

Salu2.
Responder Con Cita
  #2  
Antiguo 27-08-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
Hola nefy,

El color lo toma de la variable privada FBodyColor que desafortunadamente no se refleja en ninguna propiedad. Sin embargo es sencillo agregarla si estás dispuesto a modificar el código fuente.

Los pasos no son muchos ni complicados:

1.

En la declaración de la clase TdxCustomWinXPBar en la unidad dxWinXPBar.pas agregas el método privado:

Código Delphi [-]
procedure SetBodyColor(Value: TColor);

que implementas así:

Código Delphi [-]
procedure TdxCustomWinXPBar.SetBodyColor(Value: TColor);
begin
  if FBodyColor <> Value then
  begin
    FBodyColor := Value;
    Self.Invalidate;
  end;
end;

Esto es necesario para obligar el repintado cuando se cambie el color.

2.

Agregas la propiedad en la sección protected:

Código Delphi [-]
property BodyColor: TColor read FBodyColor write SetBodyColor;

3.

Publicas la propiedad en la clase TdxWinXPBar:

Código Delphi [-]
TdxWinXPBar = class(TdxCustomWinXPBar)
published
  property BodyColor;
  ...
end;

4.

Recompilas y listo; ahora dispones de la propiedad BodyColor que puedes modificar desde el inspector de objetos.

Claro que, como el nombre lo indica, BodyColor sólo afecta el color del cuerpo de la componente y no el del encabezado. Supongo que podrá modificarse esto también pero hay que examinar con cuidado el método Paint de TdxCustomWinXPBar.

// Saludos

Última edición por roman fecha: 27-08-2004 a las 21:02:54.
Responder Con Cita
  #3  
Antiguo 27-08-2004
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Muchas gracias roman, ya habia encontrado donde modificarlo en el codigo fuente y es cuando se construye el componente especificamente el siguiente codigo:

Código Delphi [-]
constructor TdxCustomWinXPBar.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

//Este es el color que se pone en el listado de los elementos
  FBodyColor := $00EFEFE4;

//Este color abarca casi todo el encabezado
  FGradientFrom := clBtnFace;

//Color q va junto con el encabezado
  FGradientTo := $00EFEFE4;
end;

Y aqui solo los he estado modificando al gusto aunq obviamente la mayoria de los colores se establece en codigo hexadecimal.

Sin embargo no pense en publicarlo en el object inspector (tal como lo has propuesto), y me parece mejor asi, que modificar los valores y queden estaticos sin posibilidad de modificarlos en todas mis aplicaciones (como yo lo hice).

Y asi ire metiendome mas aun a la programacion pura como lo es la creacion de componentes.

Salu2.
Responder Con Cita
  #4  
Antiguo 27-08-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
¡Perfecto!

Viendo lo que pusiste ya publiqué GradientFrom, GradientTo. También SeparatorLine (línea entre el cuerpo y el encabezado).

Ya sólo resta el color de fondo de los botones para expandir y contraer el panel. Si te fijas estos no se pueden publicar de la misma forma ya que son bitmaps que toma del archivo de recursos. Pero ya veremos...

Por cierto, en los métodos "Set" de estas propiedades usa InternalRedraw en lugar de Invalidate. Eso es lo que el autor usa en el método similar para HotTrackColor. InternalRedraw llama a Invalidate pero antes checa algo.

// Saludos
Responder Con Cita
  #5  
Antiguo 27-08-2004
Avatar de nefy
nefy nefy is offline
No confirmado
 
Registrado: nov 2003
Posts: 171
Poder: 0
nefy Va por buen camino
Pues me adivinaste el pensamiento (modificar el boton). Precisamente no se puede modificar de la misma manera como los colores pero ya veremos... dijo un ciego.


Salu2.
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 10:14:12.


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