【问题标题】:How to hide TActionMainMenuBar images如何隐藏 TActionMainMenuBar 图像
【发布时间】:2014-06-19 16:09:46
【问题描述】:

我在表单上放置了TActionMainMenuBar,如下所示:

现在,它看起来非常好,除了左边应该放置图像的空白处。由于我不需要在菜单中绘制图像,我怎样才能完全隐藏那个间隙?找不到任何我可以用来隐藏它的属性,而且 Google 查询没有返回关于该主题的结果。

【问题讨论】:

  • 我不认为你可以隐藏那个排水沟。它也不仅仅用于图像。检查和项目符号。
  • 如果可能的话,我想至少拥有 OwnerDraw,这样我就可以手动确定它的外观。我需要检查,但是对于该功能来说太大了,如果可能的话,我想将其缩小一点。或者对于不可检查的项目可能完全隐藏它,这将是理想的。
  • 如果您需要支票,那么您应该离开它。您的用户不会在意。您可以编写自己的样式挂钩,但很容易出错。
  • 在您的计算机上打开记事本并查看其菜单。这就是标准 Windows 菜单的样子。无论有没有图像,那里都有一个排水沟。
  • 但是标准菜单的间距要小很多,而且分隔线一直到开头。而在 TAc​​tionMainMenuBar 中却没有。从菜单整个宽度的 1/5 开始看起来很丑。但它看起来像它的主要 PITA 使其没有图像排水沟。在下雨天,我们会看看 VCL 样式的覆盖。

标签: delphi delphi-xe2 vcl


【解决方案1】:

以下示例尝试演示使用您自己的菜单样式需要做些什么。它只是试图从未使用的图像中获得空间,但您可以覆盖绘图的任何方面,请参阅“xpactnctrls.pas”以了解可能的实现。

type
  TBarStyle = class(TXPStyleActionBars)
  public
    function GetControlClass(ActionBar: TCustomActionBar;
      AnItem: TActionClientItem): TCustomActionControlClass; override;
  end;

  TMenuStyle = class(TXPStyleMenuItem)
  protected
    procedure CalcLayout; override;
  public
    procedure CalcBounds; override;
  end;

var
  BarStyle: TBarStyle;

function TBarStyle.GetControlClass(ActionBar: TCustomActionBar;
  AnItem: TActionClientItem): TCustomActionControlClass;
begin
  Result := inherited GetControlClass(ActionBar, AnItem);
  if ActionBar is TCustomActionPopupMenu then
    Result := TMenuStyle;
end;

procedure TMenuStyle.CalcLayout;
begin
  inherited;
  GlyphPos := Point(-16, GlyphPos.Y);
end;

procedure TMenuStyle.CalcBounds;
var
  R: TRect;
begin
  inherited;
  R := TextBounds;
  OffsetRect(R, -16, 0);
  TextBounds := R;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ActionMainMenuBar1.ActionManager.Style := BarStyle;
end;

initialization
  BarStyle := TBarStyle.Create;
  RegisterActnBarStyle(BarStyle);
finalization
  UnregisterActnBarStyle(BarStyle);
  BArStyle.Free;

【讨论】:

  • 这看起来可能是我需要的。刚刚测试并得到了一些(不成功的)结果,但至少我有一些东西可以开始。谢谢,一旦我尝试更多,我会回来提供信息。
  • @Marko - 是的,仅偏移矩形看起来不太正确。顺便说一句,上述代码中的注册/取消注册调用似乎不是必需的,它们可能是用于设计时。
  • 成功了:i.imgur.com/mxiLCjb.png 看起来不错,复选框看起来也不错(我只是跳过将文本向左偏移)。我不得不重写 DrawGlyph()DrawSeparator() 函数,并且基本上复制整个代码只是为了编辑它的几行。
猜你喜欢
  • 2012-02-04
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 2017-06-15
  • 2011-12-02
  • 2014-01-08
相关资源
最近更新 更多