【问题标题】:Creating a menu button in Windows在 Windows 中创建菜单按钮
【发布时间】:2011-01-02 06:42:27
【问题描述】:

Microsoft 的 User Experience Interaction Guidelines 给出了一些关于何时使用菜单按钮的 UI 指南:

http://i.msdn.microsoft.com/Aa511453.command51(en-us,MSDN.10).png

如何创建这些菜单按钮之一?我找到了有关

的信息
  • 如何在 Vista 及以上版本中创建拆分按钮
  • 如何使用下拉菜单创建工具栏按钮
  • 如何创建一个常规按钮并手动连接一个弹出菜单的 OnClick 事件处理程序

但是有没有什么标准的方法来创建一个按钮,而不是在工具栏中,使用小向下三角形,单击时会自动弹出一个菜单?

(我使用的是 Delphi / C++Builder,但欢迎使用其他解决方案。)

【问题讨论】:

    标签: windows delphi button menu


    【解决方案1】:

    您可以使用 OnClick 强制弹出,为了保持一致性,不要使用光标位置,而是使用控件位置。

    procedure TForm1.Button1Click(Sender: TObject);
    var
      pt : TPoint;
    begin
      Pt.X := Button1.Left;
      Pt.Y := Button1.Top+Button1.Height;
      pt := ClientToScreen(Pt);
      PopupMenu1.Popup(pt.x,pt.y);
    end;
    

    然后,您可以使用 Delphi 2010 按钮或以前版本的 TBitBtn 添加“字形”,并将位图/字形属性分配给适当的图像并右对齐。

    【讨论】:

    • 你也可以使用向下的小三角字符▾ (fileformat.info/info/unicode/char/25be/index.htm)
    • 我需要做一些特别的事情来让那个三角形出现吗?当我在我的控件中尝试它时,它呈现为一个框(无法识别的字符)。
    • 如果您不能确保拥有所需字符的字体,那么带有向右对齐字形的位按钮可能是更好的主意。您可能可以向操作系统询问适当的内置映像,但这是一个单独问题的主题。
    【解决方案2】:

    您没有提及您使用的是哪个版本的 Delphi,但在 Delphi 2010 中,TButton 对此具有新属性:Dr​​opDownList 可以与 TPopupMenu 关联以定义菜单项,Style 可以设置为 bsSplitButton。

    这会产生一个您可以按下的按钮,该按钮的右侧还有一个下拉箭头,要在您单击箭头左侧时弹出菜单,按钮单击处理程序中的此代码应该可以完成这项工作。

    procedure TForm1.Button1Click(Sender: TObject);
    var
      CursorPos: TPoint;
    begin
      GetCursorPos(CursorPos);
      PopupMenu1.Popup(CursorPos.X, CursorPos.Y);
    end;
    

    在以前的 Delphi 版本中,我认为您必须使用 TToolBar。

    【讨论】:

    • bsSplitButton 确实会执行下拉菜单,但在单击分隔线左侧的按钮时不会。更容易在 onclick 中处理这两种方法。
    • 我看到了如何做拆分按钮(在我们正在使用的 Delphi 2009 中也可用),但微软的文档将菜单按钮描述为与拆分按钮和按钮不同,这似乎很奇怪做一个菜单按钮的唯一方法是用 OnClick 模拟一个。
    • 这几乎不是一个模拟,乔希。如果单击时不显示菜单,您认为“真正的”菜单按钮会做什么?我的意思是,您可以创建一个 TMenuButton 组件,但它所做的只是覆盖其Click 方法以显示其PopupMenu 属性,而不是调用OnClick 事件处理程序。所以你真的只需要保存一个函数调用。
    猜你喜欢
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多