¿Es posible cambiar el color de las pestañas Ttabsheet?
Pregunta
Estoy ejecutando Lázaro 0.9.30.2. Tengo una formación en la que hay un tpageControl. Dentro del tpageControl hay una serie de hojas de ttab (alrededor de 30 de ellas). Lo que quiero hacer es código de color las pestañas, por lo que los primeros 10 son rojos, los próximos 10 son azules y los últimos 10 son verdes. He visto fragmentos de código en la intranet que cambian el color de la hoja de pestaña (incluida la pestaña en sí) cuando hace clic en ellos y navega hacia ellos (para resaltar la pestaña activa), pero lo que quiero hacer es colorearlos como se describe anteriormente cuando Las hojas de pestaña se cargan primero.
¿Hay forma de hacer esto?
Solución
Si es suficiente para que obtengas una solución un poco difícil Trabajar solo en Windows con temas discapacitados Luego intente lo siguiente:
No verifique el Use manifest file to enable themes (Windows only)
opción de Project / Project Options ...
Diálogo de configuración del proyecto y pegue el siguiente código en su unidad con el control de la página. Utiliza la clase interpuesta, por lo que funcionará solo en unidades donde pegas este código.
uses
ComCtrls, Windows, LCLType;
type
TPageControl = class(ComCtrls.TPageControl)
private
procedure CNDrawItem(var Message: TWMDrawItem); message WM_DRAWITEM;
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
implementation
procedure TPageControl.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
if not (csDesigning in ComponentState) then
Style := Style or TCS_OWNERDRAWFIXED;
end;
end;
procedure TPageControl.CNDrawItem(var Message: TWMDrawItem);
var
BrushHandle: HBRUSH;
BrushColor: COLORREF;
begin
with Message.DrawItemStruct^ do
begin
case itemID of
0: BrushColor := RGB(235, 24, 33);
1: BrushColor := RGB(247, 200, 34);
2: BrushColor := RGB(178, 229, 26);
else
BrushColor := ColorToRGB(clBtnFace);
end;
BrushHandle := CreateSolidBrush(BrushColor);
FillRect(hDC, rcItem, BrushHandle);
SetBkMode(hDC, TRANSPARENT);
DrawTextEx(hDC, PChar(Page[itemID].Caption), -1, rcItem, DT_CENTER or
DT_VCENTER or DT_SINGLELINE, nil);
end;
Message.Result := 1;
end;
Así es como se ve (feo :)