2012-03-22 20 views
0

我在工具栏上有几个按钮,样式定义为tbsDropDown和一个弹出式菜单。Check-ToolButton。在显示菜单之前我需要一个事件

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

有什么建议吗?

感谢

+1

NGLN的假设是否正确,你想阻止菜单出现? – 2012-03-22 21:56:04

回答

1

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

2

首先,TToolButton.CheckMenuDropDown是一个例程,它总是下拉菜单,但在无法返回时返回False。

我知道您希望在数据集中没有记录时禁用下拉菜单。

可能的解决方案:

  • 禁用工具按钮(或临时设置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属性。
相关问题