日安!
我需要在TPageControl中更改一些TabSheet标题的文本颜色。像照片上这样的东西
我知道如何使用OnDrawTab完成。但是如果我启用了OwnerDraw,Windows XP主题的装饰就会消失。这就是为什么我尝试手动绘制这个装饰。我是这样尝试的:
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;
还有这个
(left- OwnerDraw版本,右-默认绘制)
正如您所看到的,TabSheets有一些没有过度绘制的边框。我不能透支这个边界。
如何正确绘制标签页的背景(如右边的PageControl)?
2条答案
按热度按时间44u64gxh1#
一个可能的解决方案是覆盖
TPageControl
的PaintWindow
方法,而不是使用ownerdraw,这样你就可以控制选项卡的每个视觉方面。检查这个基本样本。
这就是结果。
57hvy0tb2#
在 Delphi 中有一个选项(不确定旧版本)可以改变TPageControl标题颜色在属性中选择所需的字体颜色然后在style elements属性中取消选择seFont为false然后Build