入住工具按钮。在显示菜单之前我需要一个事件

时间:2012-03-22 20:40:07

标签: delphi delphi-5

我在工具栏上有几个按钮,其中样式定义为tbsDropDown,并指定了弹出菜单。

在显示菜单之前,我需要检查数据库中是否有任何记录。我添加了btnFilter.CheckMenuDropDown;按钮的主要部分,所以我可以在那里检查,但“向下箭头”按钮显示弹出窗口。我需要用“BeforePopup”事件进行干预。

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:2)

首先,TToolButton.CheckMenuDropDown是一个常规下拉菜单的例程,但是当它不能时返回False。

我了解您要在de数据集中没有记录时禁用下拉菜单。

可能的解决方案:

  • 当没有记录时,禁用工具按钮(或暂时将PopupMenu属性设置为nil),反之亦然。这最好通过将动作附加到按钮来完成。
  • 设置TToolButton班级并覆盖CheckMenuDown

    type
      TToolButton = class(ComCtrls.TToolButton)
      private
        FCanDropDown: Boolean;
      public
        function CheckMenuDropdown: Boolean; override;
        property CanDropDown: Boolean read FCanDropDown write FCanDropDown;
      end;
    
    function TToolButton.CheckMenuDropdown: Boolean;
    begin
      Result := FCanDropDown and (inherited CheckMenuDropdown);
    end;
    

    但这不是设计时解决方案,您必须在运行时相应地设置CanDropDown属性。

  • 创建一个新组件并在上面的代码中发布CanDropDown属性。

答案 1 :(得分:1)

在菜单出现之前,其OnPopup事件将触发。这使您有机会在最终显示之前修改菜单的内容。