小编ven*_*tik的帖子

如何更改主题TabSheet标题的文本颜色?

美好的一天!

我需要在TPageControl中更改某些TabSheet的标题的文本颜色.照片上有这样的东西

在此输入图像描述

我知道如何使用OnDrawTab完成.但如果我启用了OwnerDraw,Windows XP Theme的装饰就会消失.这就是为什么我尝试手动绘制这个装饰.这就是我试图这样做的方式:

procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
  FRect: TRect;
  Text: string;
begin
  FRect := Control.TabRect(TabIndex);
  if Active then
    ThemeServices.DrawElement(Control.Canvas.Handle, ThemeServices.GetElementDetails(ttTabItemHot), FRect)
  else
    ThemeServices.DrawElement(Control.Canvas.Handle, ThemeServices.GetElementDetails(ttTabItemNormal), FRect);
  Text := PageControl1.Pages[TabIndex].Caption;
  Control.Canvas.Brush.Style := bsClear;
  if not Active then
    FRect.Top := FRect.Top + 4;
  DrawText(Control.Canvas.Handle, PChar(Text), Length(Text), FRect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
end;
Run Code Online (Sandbox Code Playgroud)

我得到了这个

在此输入图像描述

(左 - OwnerDraw版本,右 - 默认绘制)

正如您所看到的,TabSheets有一些不透支的边框.我不能透支这个边界.

如何正确绘制选项卡的背景(如右侧的PageControl)?

delphi tpagecontrol

6
推荐指数
1
解决办法
7635
查看次数

标签 统计

delphi ×1

tpagecontrol ×1