PDA

Ver la Versión Completa : Cambiar el color de un componente nuevo


nefy
26-08-2004, 17:54:26
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:


procedure SetBodyColor(Value: TColor);


que implementas así:


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:


property BodyColor: TColor read FBodyColor write SetBodyColor;


3.

Publicas la propiedad en la clase TdxWinXPBar:


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:


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.