gpt4 book ai didi

delphi - 是否可以更改 TTabSheet 选项卡的颜色

转载 作者:行者123 更新时间:2023-12-03 15:29:27 27 4
gpt4 key购买 nike

我正在运行 Lazarus 0.9.30.2。我有一个 TForm,上面有一个 TPageControl。 TPageControl 内有一系列 TTabSheets(大约 30 个)。我想要做的是对选项卡进行颜色编码,因此前 10 个是红色,接下来的 10 个是蓝色,最后 10 个是绿色。我在 Intranet 上看到过一些代码片段,当您单击它们并导航到它们(以突出显示事件选项卡)时,这些代码片段会更改选项卡表颜色(包括选项卡本身),但我想要做的是在以下情况下对它们进行着色:首先加载标签页。

有办法做到这一点吗?

enter image description here

最佳答案

如果这足以让您获得一个有点棘手的解决方案仅在禁用主题的 Windows 上工作,请尝试以下操作:

取消选中项目/项目选项...项目设置对话框中的使用 list 文件启用主题(仅限 Windows) 选项,并将以下代码粘贴到您的带页面控制的单元。它使用插入的类,因此它只能在您粘贴此代码的单元中工作。

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;

这是它的样子(丑陋:)

enter image description here

关于delphi - 是否可以更改 TTabSheet 选项卡的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9340940/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com