首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以更改TTabSheet选项卡标题的字体颜色

是否可以更改TTabSheet选项卡标题的字体颜色
EN

Stack Overflow用户
提问于 2012-03-24 19:47:21
回答 2查看 2K关注 0票数 3

这里只是一个后续问题,=> link是否可以将TabSheet标题的文本颜色更改为另一种颜色(例如,白色)并将字体样式更改为“加粗”?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-26 18:07:15

也许这会给你这样的灵感。同样,请注意,这将只在视窗系统上工作,并在您的应用程序中禁用主题。

代码语言:javascript
复制
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
  FontHandle: HFONT;
  FontColor: COLORREF;
  FontObject: TLogFont;
  BrushColor: COLORREF;
  BrushHandle: HBRUSH;
begin
  with Message.DrawItemStruct^ do
  begin
    GetObject(Font.Handle, SizeOf(FontObject), @FontObject);
    case itemID of
      0:
      begin
        BrushColor := RGB(235, 24, 33);
        FontColor := clWhite;
        FontObject.lfWeight := FW_NORMAL;
        FontObject.lfItalic := 0;
      end;
      1:
      begin
        BrushColor := RGB(247, 200, 34);
        FontColor := clGreen;
        FontObject.lfWeight := FW_NORMAL;
        FontObject.lfItalic := 1;
      end;
      2:
      begin
        BrushColor := RGB(178, 229, 26);
        FontColor := clGreen;
        FontObject.lfWeight := FW_BOLD;
        FontObject.lfItalic := 1;
      end
      else
        BrushColor := ColorToRGB(clBtnFace);
    end;

    BrushHandle := CreateSolidBrush(BrushColor);
    FillRect(hDC, rcItem, BrushHandle);

    FontHandle := CreateFontIndirect(FontObject);
    try
      SelectObject(hDC, FontHandle);
      SetTextColor(hDC, FontColor);
      SetBkMode(hDC, TRANSPARENT);
      DrawTextEx(hDC, PChar(Page[itemID].Caption), -1, rcItem, DT_CENTER or
        DT_VCENTER or DT_SINGLELINE, nil);
    finally
      DeleteObject(FontHandle);
    end;
  end;
  Message.Result := 1;
end;

下面是它的外观:

票数 3
EN

Stack Overflow用户

发布于 2020-01-02 17:53:55

用_hDc替换hDc,用drawtext和

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9851471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档