Я работаю над плагином Eclipse RCP, который содержит View.Это представление содержит OleControlSite, на котором размещена книга Excel.
Книга Excel добавляется в представление с помощью кода следующего содержания:
public void createPartControl(Composite parent) {
:
OleFrame oleFrame = new OleFrame(parent, SWT.NONE);
OleControlSite oleSite = new OleControlSite(frame, SWT.NONE, "Excel.Sheet");
oleSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
:
}
Что я хотел бы иметь возможностьdo отвечает на привязку ключа Eclipse, когда в центре внимания находится книга Excel.Намерение состоит в том, чтобы открыть диалоговое окно «помощник», которое помогает пользователю выбрать подходящее значение для текущей выбранной ячейки в электронной таблице.
Проблема, с которой я столкнулся, заключается в том, что Excel проверяет ключевые события(как и следовало ожидать), но затем глотает их;они никогда не попадают в рабочую среду Eclipse, чтобы я мог о них услышать.
Я успешно зарегистрировался и получил множество событий Excel через OLE в ходе разработки.Тем не менее, все события, которые я имею в своем распоряжении через этот механизм, являются «специфичными для Excel» вещами, такими как «активированный лист», «измененный лист», «измененный выбор листа», и тому подобное.
:
String WORKBOOK_EVENT_SINK_ID = "{00024412-0000-0000-C000-000000000046}";
int WORKBOOK_SHEET_CHANGE_ID = 0x0000061c;
oleSite.addEventListener(controlSiteAuto, WORKBOOK_EVENT_SINK_ID, WORKBOOK_SHEET_CHANGE_ID, myListener);
:
Похоже, что нет способа зарегистрироваться для необработанных ключевых событий.
Несмотря на то, что можно «сплевывать» возможные способы «услышать» ключевые события, когда Excel находится в фокусе, яПробовал добавлять фильтры, прослушиватели и ключевые прослушиватели к таким вещам, как дисплей по умолчанию, активная оболочка, само представление и т. д., но без радости.Такое ощущение, что Excel получает абсолютную первоклассную оценку ключевых событий.
Я начинаю размышлять о возможности махинаций, таких как введение макроса в книгу Excel, которая будет следить за интересными нажатиями клавиши отвечал бы, генерируя событие, которое я мог бы зарегистрировать через OleControlSite.Такое чувство, что, может быть, я выхожу за пределы здравого смысла, когда я думаю, что подобные мысли ...
Если у кого-то есть какие-либо понятия, я был бы рад услышать о них.