创建看起来像 TMainMenu 的 TPanel?

Create TPanel which looks like TMainMenu?

我想创建一个看起来类似于 TMainMenu 但基于 TPanel 的组件。 Windows 7 下的 TMainMenu 有颜色渐变。

TPanel如何实现类似的效果?不是任何渐变,而是 Windows 渐变,因此它看起来像原生组件。

我也试过TMainMenu.PaintTo但是这个方法不可用

这要归功于 UxTheme API (uses UxTheme)。

使用 OpenThemeData and DrawThemeBackground,

procedure TForm1.FormPaint(Sender: TObject);
begin

  var R := Rect(0, 0, ClientWidth, 32);

  var h := OpenThemeData(Handle, 'MENU');
  if h <> 0 then
    try
      DrawThemeBackground(h, Canvas.Handle, MENU_BARBACKGROUND, MB_ACTIVE, R, nil);
    finally
      CloseThemeData(h);
    end;

end;

生产

当然,在实际应用中,你会重构它。例如,您不会硬编码 32 常量;相反,您将根据当前的 DPI 缩放比例确定合适的菜单栏高度,