如何隐藏TActionMainMenuBar图像

时间:2014-06-19 16:09:46

标签: delphi delphi-xe2 vcl

我已将TActionMainMenuBar放在表单上,​​如下所示:

ActionMainMenuBar

现在,它看起来很完美,除了图像应该左边的空白间隙。由于我不需要在菜单中绘制图像,我怎样才能完全隐藏这个差距? Haven找不到任何可用于隐藏此属性的属性,Google查询未返回该主题的结果。

1 个答案:

答案 0 :(得分:2)

下面的示例尝试演示使用您自己的菜单样式需要什么。它只是尝试从未使用的图像中获取空间,但您可以覆盖图形的任何方面,请参阅“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;