Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Cambiar el color de un componente nuevo (https://www.clubdelphi.com/foros/showthread.php?t=13671)

nefy 26-08-2004 17:54:26

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.

roman 27-08-2004 21:00:33

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

nefy 27-08-2004 21:11:19

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.

roman 27-08-2004 21:34:19

¡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

nefy 27-08-2004 21:38:19

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.


La franja horaria es GMT +2. Ahora son las 17:35:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi