PDA

Ver la Versión Completa : Problemas con XPManifest y Colores Panels


enecumene
26-10-2008, 01:24:22
Saludos colegas, tengo este extraño problema con el XPManifest y los colores de los panels, si tengo el Panel de color blanco en tiempo de diseño y tengo el XPMani, en tiempo de ejecución el color blanco del panel desaparece y así con cualquier color, ¿A alguien le ha sucedido o es normal? ¿hay alguna solución?.

Saludos.

TOPX
26-10-2008, 01:47:12
Saludos,

A mí me parece que es algo normal, pues, se supone que uno incluye el XPManifest para que el look-and-feel de la aplicación esté de acuerdo con los estilos visuales de los themes de Windows. Siendo así, la solución sería decidirse, o quiere colores personalizados o quiere los de Windows.

enecumene
26-10-2008, 01:55:39
Pos no me queda más remedio que obviar el XPManifest :(, Muchas gracias TOPX.

Saludos.

TOPX
26-10-2008, 02:20:29
Un momento, seguí buscando formas de "parchear" el inconveniente y encontré que:

1. Se podría poner un Shape en el Panel, sus propiedades Align = alClient y Brush.Color igual al color deseado.

2. En tiempo de ejecución, para el Panel en cuestión, cambiar el valor de la propiedad ParentBackground = False.

3. Componentes de ExtCtrls ó no herederos de comctl32 versión 6... etc., etc.

Qué cosas :rolleyes:

enecumene
26-10-2008, 02:32:57
Probaré con la segunda opción ya que en la primera tener que poner shapes (no dudes que no lo pensé :p) a todos los panels (son muchos) sería demasiado engorroso, luego más tarde te comento.

Saludos ;)

jorge82
26-10-2008, 04:11:59
Parece ser que la "culpa" la tiene el constructor de TCustomPanel, clase de la cual deriva TPanel.


{ TCustomPanel }

constructor TCustomPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := [csAcceptsControls, csCaptureMouse, csClickEvents,
csSetCaption, csOpaque, csDoubleClicks, csReplicatable];
{ When themes are on in an application default to making
TCustomPanel's paint with their ParentBackground }
if ThemeServices.ThemesEnabled then
ControlStyle := ControlStyle + [csParentBackground] - [csOpaque];
Width := 185;
Height := 41;
FAlignment := taCenter;
BevelOuter := bvRaised;
BevelWidth := 1;
FBorderStyle := bsNone;
Color := clBtnFace;
FFullRepaint := True;
UseDockManager := True;
end;



como se puede ver en la línea:

if ThemeServices.ThemesEnabled then
ControlStyle := ControlStyle + [csParentBackground] - [csOpaque];

si los temas de Windows XP estan habilitados en la aplicación, el constructor crea el Panel con el color de su objeto Parent, el cuál casi siempre es un formulario, entonces la solución es "quitarle" esa propiedad al TPanel hmmm digamos al momento de crear el formulario que lo contiene.

procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1.ControlStyle := Panel1.ControlStyle - [csParentBackground];
end;

cHackAll
27-10-2008, 00:31:04
Hola (http://www.clubdelphi.com/foros/showpost.php?p=278955&highlight=SetWindowTheme)

Caro
27-10-2008, 00:33:22
Hola Fernando, a mi también me ha dado dolores de cabeza el XpManifest con los panels, yo lo he solucionado con la segunda forma que te menciona en el amigo TopX, pero no en ejecución sino en diseño, la propiedad ParentBackGround ya viene con False, en dideño lo colocas a True y despues nuevamente a False y veras que ya te funciona.

Saluditos

enecumene
27-10-2008, 00:41:26
Hola Fernando, a mi también me ha dado dolores de cabeza el XpManifest con los panels, yo lo he solucionado con la segunda forma que te menciona en el amigo TopX, pero no en ejecución sino en diseño, la propiedad ParentBackGround ya viene con False, en dideño lo colocas a True y despues nuevamente a False y veras que ya te funciona.

Saluditos

Pues muchas gracias Caro, funciona :), gracias por ahorrarme un buen pedazo de código ;).

Saludos.