Несколько лет назад Рэймонд Чен писал об этой конкретной проблеме во множестве статей о размещении контекстного меню. Ключевой темой его статей было то, что, читая документацию, вы должны помнить, что ваша программа играет роль оболочки, тогда как документация обычно пишется с точки зрения кода, реализующего контекст. -меню интерфейсов, в отличие от кода, вызывающего их.
Уже часть 2 Чен заметил, что меню send-to и open-with выглядят пустыми. Часть 5 посвящена вашей непосредственной озабоченности этими подменю. Ответ в том, что вам нужно обрабатывать сообщения меню . С вашим меню связан дескриптор окна - дескриптор, который вы предоставили TrackPopupMenuEx
(HND
в ответ Иссама на ваш вопрос). Это окно будет получать сообщения, пока меню активно, и оно должно пересылать их объектам, реализующим команды меню. В окне есть оконная процедура, и здесь вам нужно вызвать методы интерфейса HandleMenuMsg
и HandleMenuMsg2
интерфейса. В статье есть пример.
Другие части этой серии статей охватывают другие вещи, на которые вы, несомненно, ссылались, когда говорили, что ваше меню «почти» работает. Part 3 говорит о том, где появляется диалог свойств. Part 7 s о вызове глагола по умолчанию. Я предлагаю вам прочитать всю серию. Не бойтесь, что все в C ++; это почти все методы интерфейса и API-функции, поэтому он должен без проблем перевести на Delphi.