Заезд ToolButton. Мне нужно событие перед показом меню - PullRequest
0 голосов
/ 23 марта 2012

У меня есть пара кнопок на панели инструментов со стилем, определенным как tbsDropDown и назначенным всплывающим меню.

Мне нужно проверить, есть ли какие-либо записи в базе данных, прежде чем показывать меню.Я добавил btnFilter.CheckMenuDropDown;к основной части кнопки, так что я могу проверить там, но кнопка «Стрелка вниз» показывает всплывающее окно.Мне нужно вмешаться в этот момент с событием "BeforePopup"

Есть предложения?

Спасибо

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Во-первых, TToolButton.CheckMenuDropDown - это процедура, которая всегда выпадает из меню, но возвращает False, когда она не может.

Я понимаю, что вы хотите отключить раскрывающееся меню, если в нем нет записейнабор данных

Возможные решения:

  • Отключить кнопку инструмента (или временно установить свойство PopupMenu на ноль), когда нет записей, и наоборот.Это предпочтительно сделать, прикрепив действие к кнопке.
  • Вставьте класс 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 голос
/ 23 марта 2012

Перед появлением меню происходит событие OnPopup.Это дает вам возможность изменить содержимое меню до того, как вы наконец его покажете.

...