【发布时间】:2013-08-16 21:59:07
【问题描述】:
我使用 Delphi7,PageControl 与所有者绘制。正如我在非所有者绘制的 PageControls 上看到的那样,我无法获得如此简单和漂亮的选项卡外观。有什么不好: 使用自绘时,我无法在“整个”选项卡标题区域上绘制,OS 会在选项卡标题周围绘制 1-2 像素的小框。
1)Delphi不是owner-draw,看起来也可以(用XPMan):
2) Delphi owner-draw,你看到不是整个标签页头都可以着色(使用 XPMan):
我在这里用蓝色绘制当前标签,用白色绘制其他标签。仅举例。 代码:
procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
c: TCanvas;
begin
c:= (Control as TPageControl).Canvas;
if Active then
c.Brush.Color:= clBlue
else
c.Brush.Color:= clWhite;
c.FillRect(Rect);
end;
2b) 真实应用中的 Delphi 所有者绘制(使用 XPMan):
为什么我需要使用自绘?简单的。在选项卡标题上绘制 X 按钮,使用自定义颜色绘制上线,从图像列表绘制图标。
我正在寻找一种方法来绘制选项卡标题的整个矩形,而不是减少 PageControl 所有者绘制事件的矩形。我试图增加所有者绘制事件给出的矩形,但这无济于事,操作系统无论如何都会在标签标题周围重新绘制这个 1-2 像素的薄框架。
【问题讨论】:
-
您可以首先将您的 Delphi 版本更新为不是为 Windows 95 设计的版本。另外,如果您自己绘制标签,并且不包含正在绘制的代码他们,我们不可能建议如何使它画得更好。
-
第一张图片中的选项卡控件看起来很像普通的选项卡控件,没有迹象表明它是所有者绘制的。包含“xpman”以使用并将“OwnerDraw”设置为 false,您的选项卡控件应该看起来完全一样(在 W7 和可能的 Vista 上)。
-
有人能解释一下新的 Delphi 版本有什么帮助吗?它是“样式”的意思吗?程序员可以定义自己的风格吗?
-
@Ken - 我认为您的意思是“支持主题化”的“vcl 样式”。我不知道它是否允许自定义主题,如果不允许,它对 OP 没有帮助。此外,对操作系统主题的内置支持与这个问题无关,这不是 OP 想要的。至于代码,你不可能不在事件处理程序中调用inherited,DrawTab(准确地说是OnDrawTab)不是消息处理程序。无论如何,不幸的是,即使你完全超越了
WM|CN_DRAWITEM,而不是调用inherited,3D 边框仍然由操作系统绘制——显然是在绘制周期的后期。 -
@TLama - 我也是这么理解的。我认为前一张照片只是对 OP 的一些误解。但亚历克斯必须参与澄清,要么接受答案,要么尝试更好地解释。
标签: delphi delphi-7 tpagecontrol