我想使用Windows的原生外观,我正在尝试学习如何操作。
我正在尝试使用Windows工具按钮背景绘制timage.canvas,但是timage的背景看起来像White,它看起来与Windows不同, 我该如何解决这个问题?
这是我的代码;
procedure TForm1.Button1Click(Sender: TObject);
var
theme: HTHEME;
begin
theme := OpenThemeData(Handle, 'TOOLBAR');
// error checking omitted for brevity
try
DrawThemeBackground(
theme,
Image1.Canvas.Handle,
TP_BUTTON,
TS_HOT,
Image1.ClientRect,
nil
);
finally
CloseThemeData(theme);
end;
end;
这是我在timage上应用主题时的结果图片:
答案 0 :(得分:4)
你应该要求一个'按钮'主题,不是' TOOLBAR'如果你想要一个按钮。
theme := OpenThemeData(Handle, 'BUTTON');
这一行也应该在try
之前。
获取主题部分和状态列表see this
从上面的列表中,您会看到您使用的iPartId
和iStateId
不是正确的(虽然有效)。我建议改为BP_PUSHBUTTON
和PBS_HOT
。
procedure TForm3.Button2Click(Sender: TObject);
var
theme: HTHEME;
begin
theme := OpenThemeData(Handle, 'BUTTON');
try
DrawThemeBackground(theme,
Image1.Canvas.Handle,
BP_PUSHBUTTON,
PBS_HOT,
Image1.ClientRect,
nil);
finally
CloseThemeData(theme);
end;
end;
修改这是一张仅用于比较Windows 7中TToolButton
的{{1}}的图片:
当您看到TToolBar
(在TToolbutton
顶部)时,热点',并没有TToolbar
的蓝色外观。工具栏下面是左边的代码,右边是我的建议。你问的是浅灰色/白色或浅灰色/蓝色的区别吗?