【问题标题】:Is it possible to change the colour of TTabSheet tabs是否可以更改 TTabSheet 选项卡的颜色
【发布时间】:2012-02-18 11:57:51
【问题描述】:

我正在运行 Lazarus 0.9.30.2。 我有一个 TForm,上面有一个 TPageControl。在 TPageControl 中有一系列 TTabSheets(大约 30 个)。我想做的是对标签进行颜色编码,所以前 10 个是红色,接下来的 10 个是蓝色,最后 10 个是绿色。我在 Intranet 上看到了代码 sn-ps,当您单击它们并导航到它们(以突出显示活动选项卡)时更改选项卡表颜色(包括选项卡本身),但我想要做的是按照描述为它们着色上面第一次加载标签页时。

有没有办法做到这一点?

【问题讨论】:

  • 您好,我不确定我是否明白您的问题。您是否尝试过改用TTabControl?它发布了所需的OnDrawTab 事件。 Lazarus 拥有与 Delphi 不同的TPageControl 祖先。
  • 这真的很棒@TLama .....这对我想做的事情来说没问题。非常感谢。

标签: delphi lazarus ttabsheet


【解决方案1】:

如果您获得了一个有点棘手的解决方案就足够了只能在禁用主题的 Windows 上工作,那么请尝试以下操作:

取消选中Project / Project Options ... 项目设置对话框中的Use manifest file to enable themes (Windows only) 选项,并将以下代码粘贴到您的带有页面控制的单元中。它使用插入的类,因此它只能在您粘贴此代码的单元中工作。

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;

这是它的样子(丑:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2014-04-30
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多