Можно ли изменить цвет вкладок TTabSheet?
Я использую Lazarus 0.9.30.2. У меня есть TForm, на котором есть TPageControl. В TPageControl есть серия TTabSheets (около 30 из них). То, что я хочу сделать, это кодировать цвета вкладок, поэтому первые 10 - это красные, следующие 10 - синие и последние 10 - зеленые. Я видел фрагменты кода в интрасети, которые меняют цвет листа вкладки (включая саму вкладку), когда вы нажимаете на них и переходите к ним (чтобы выделить активную вкладку), но я хочу сделать это, как описано выше, когда вкладки сначала загружаются.
Есть ли способ сделать это?
1 ответ
Если для вас достаточно сложного решения, работающего только на Windows с отключенными темами, попробуйте следующее:
Не проверяйте Use manifest file to enable themes (Windows only)
вариант из Project / Project Options ...
диалоговое окно настроек проекта и вставьте следующий код в ваш блок с контролем страницы. Он использует вставленный класс, поэтому он будет работать только в тех единицах, где вы вставляете этот код.
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;
Вот как это выглядит (некрасиво:)