Пишу BHO для IE на Delphi.
Все что нужно это добавить на тулбар кнопку с выпадающим (dropdown) меню.
Способа добавления такого вида кнопки на стандартный тулбар не нашел (эти кнопки регистрируются в реестре и нет возможности сделать кнопку dropdown — чтобы при нажатии вылазило контекстное меню и кнопка оставалась в нажатом состоянии до его закрытия).
Поэтому сделал свой тулбар (COM объект реализует IDispatch, IObjectWithSite, IDeskBand, IOleWindow) с одной единственной кнопкой и dropdown menu. Toolbar и остальные контролы создаю динамически в методе SetSite, используя VCL.
Проблема: при открытии нескольких копий IE только в первой появляется контекстное меню при нажатии на ToolButton.
Пробовал показывать меню вручную при событии OnClick, меню не показывается для всех копий IE кроме первой. Проверял, объект TPopupMenu создается для каждой загруженной копии BHO.
Кажется мне что проблема с multithreading в VCL, думаю переписать тулбар на Win32 без VCL.
Сталкивался ли кто-то с подобным?
Re: IE toolbar dropdown button
От:
Аноним
Дата:
11.07.05 08:29
Оценка:
Здравствуйте, Crulex, Вы писали:
C>Доброе время суток!
C>Пишу BHO для IE на Delphi. C>Все что нужно это добавить на тулбар кнопку с выпадающим (dropdown) меню.
C>Способа добавления такого вида кнопки на стандартный тулбар не нашел (эти кнопки регистрируются в реестре и нет возможности сделать кнопку dropdown — чтобы при нажатии вылазило контекстное меню и кнопка оставалась в нажатом состоянии до его закрытия).
C>Поэтому сделал свой тулбар (COM объект реализует IDispatch, IObjectWithSite, IDeskBand, IOleWindow) с одной единственной кнопкой и dropdown menu. Toolbar и остальные контролы создаю динамически в методе SetSite, используя VCL.
C>Проблема: при открытии нескольких копий IE только в первой появляется контекстное меню при нажатии на ToolButton. C>Пробовал показывать меню вручную при событии OnClick, меню не показывается для всех копий IE кроме первой. Проверял, объект TPopupMenu создается для каждой загруженной копии BHO.
C>Кажется мне что проблема с multithreading в VCL, думаю переписать тулбар на Win32 без VCL. C>Сталкивался ли кто-то с подобным?
При нажатиии на drop-down-кнопку генерируется сообщение TBN_DROPDOWN. Тебе нужно обрабатывать его.
А>При нажатиии на drop-down-кнопку генерируется сообщение TBN_DROPDOWN. Тебе нужно обрабатывать его.
Это понятно, его я обрабатываю. Вернее Delphi обрабатывает т.к. использую VCL, свойство DropDownMenu.
Проблема была не с обработкой сообщения, а с показом PopupMenu.
Дело оказалось в том что модуль menus.pas не является потоково безопасным, пришлось сделать несколько изменений в этом модуле относительно класса TPopupList. Только что сделал, теперь все работает.