特尔斐DrawThemeBackground导致白色背景的图象

时间:2016-04-11 01:19:25

标签: delphi themes

我想使用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上应用主题时的结果图片:

enter image description here

1 个答案:

答案 0 :(得分:4)

你应该要求一个'按钮'主题,不是' TOOLBAR'如果你想要一个按钮。

theme := OpenThemeData(Handle, 'BUTTON');

这一行也应该在try之前。

获取主题部分和状态列表see this

从上面的列表中,您会看到您使用的iPartIdiStateId不是正确的(虽然有效)。我建议改为BP_PUSHBUTTONPBS_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}}的图片:

enter image description here

当您看到TToolBar(在TToolbutton顶部)时,热点',并没有TToolbar的蓝色外观。工具栏下面是左边的代码,右边是我的建议。你问的是浅灰色/白色或浅灰色/蓝色的区别吗?