Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas con XPManifest y Colores Panels (https://www.clubdelphi.com/foros/showthread.php?t=61101)

enecumene 26-10-2008 01:24:22

Problemas con XPManifest y Colores Panels
 
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.

Código Delphi [-]
{ 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:
Código Delphi [-]
  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.
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject); 
begin   
  Panel1.ControlStyle := Panel1.ControlStyle - [csParentBackground]; 
end;

cHackAll 27-10-2008 00:31:04

Hola

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

Cita:

Empezado por Caro (Mensaje 322499)
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.


La franja horaria es GMT +2. Ahora son las 21:11:30.

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