我想使用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时的结果图:

delphi - 导致白色背景的timage上的Delphi DrawThemeBackground-LMLPHP

最佳答案

如果需要按钮,则应要求使用“按钮”主题,而不是“工具栏”。

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上的TToolBar的比较:

delphi - 导致白色背景的timage上的Delphi DrawThemeBackground-LMLPHP

正如您在“热”时看到的TToolbutton(在顶部的TToolbar上)一样,它没有蓝色的外观。工具栏下方是您的代码在左侧,我的建议在右侧。您问浅灰色/白色或浅灰色/蓝色的区别吗?

关于delphi - 导致白色背景的timage上的Delphi DrawThemeBackground,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36538378/

10-08 23:37