我想使用Windows的本机外观,并且正在尝试学习如何做。
我正在尝试使用Windows工具按钮背景绘制timage.canvas,但是timage的背景看起来是白色的,与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时的结果图:
最佳答案
如果需要按钮,则应要求使用“按钮”主题,而不是“工具栏”。
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
上的TToolBar
的比较:正如您在“热”时看到的
TToolbutton
(在顶部的TToolbar
上)一样,它没有蓝色的外观。工具栏下方是您的代码在左侧,我的建议在右侧。您问浅灰色/白色或浅灰色/蓝色的区别吗?关于delphi - 导致白色背景的timage上的Delphi DrawThemeBackground,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36538378/