Как отобразить контекстные меню «Отправить в» и «Открыть с помощью»? - PullRequest
3 голосов
/ 11 января 2010

Некоторое время назад я спросил о , как вызвать контекстное меню Windows (щелчок правой кнопкой мыши) для определенного файла в Delphi . Однако, даже если все работает (почти) в порядке, подменю «Отправить ...» и «Открыть с помощью ...» не содержат никаких элементов, даже если при щелчке правой кнопкой мыши в Проводнике по тому же имени файла работа в порядке. (Например, «Отправить на ...» имеет «Рабочий стол (создать снимок)», «Получатель электронной почты» и т. Д.).

Как я могу заставить эти меню появляться?

1 Ответ

4 голосов
/ 11 января 2010

Несколько лет назад Рэймонд Чен писал об этой конкретной проблеме во множестве статей о размещении контекстного меню. Ключевой темой его статей было то, что, читая документацию, вы должны помнить, что ваша программа играет роль оболочки, тогда как документация обычно пишется с точки зрения кода, реализующего контекст. -меню интерфейсов, в отличие от кода, вызывающего их.

Уже часть 2 Чен заметил, что меню send-to и open-with выглядят пустыми. Часть 5 посвящена вашей непосредственной озабоченности этими подменю. Ответ в том, что вам нужно обрабатывать сообщения меню . С вашим меню связан дескриптор окна - дескриптор, который вы предоставили TrackPopupMenuEx (HND в ответ Иссама на ваш вопрос). Это окно будет получать сообщения, пока меню активно, и оно должно пересылать их объектам, реализующим команды меню. В окне есть оконная процедура, и здесь вам нужно вызвать методы интерфейса HandleMenuMsg и HandleMenuMsg2 интерфейса. В статье есть пример.

Другие части этой серии статей охватывают другие вещи, на которые вы, несомненно, ссылались, когда говорили, что ваше меню «почти» работает. Part 3 говорит о том, где появляется диалог свойств. Part 7 s о вызове глагола по умолчанию. Я предлагаю вам прочитать всю серию. Не бойтесь, что все в C ++; это почти все методы интерфейса и API-функции, поэтому он должен без проблем перевести на Delphi.

...