4

少し前に、Delphiで特定のファイルのWindowsコンテキスト(右クリック)メニューをポップアップする方法について質問しました。ただし、すべてが(ほぼ)正常に機能している場合でも、同じファイル名でエクスプローラーを右クリックしても、[送信先...]および[プログラムから開く...]サブメニューには項目がありません。正常に動作します。(たとえば、「送信先...」には「デスクトップ(ショットカットの作成)」、「メール受信者」などがあります)。

これらのメニューを表示するにはどうすればよいですか?

4

1 に答える 1

4

Raymond Chenは、数年前、コンテキストメニューのホスティングに関する多くのパートのシリーズでこの正確な問題について書いています。彼の記事の重要なテーマは、ドキュメントを読むときに、プログラムがシェルの一部を果たしていることを覚えておく必要があるということでしたが、ドキュメントは通常、コンテキストメニューインターフェイスを実装するコードの観点から書かれています。それらを呼び出すコードに。

パート2の早い段階で、Chenは、send-toメニューとopen-withメニューが空になっていることを確認しました。第5部では、これらのサブメニューに関する差し迫った懸念に対処します。答えは、メニューメッセージを処理する必要があるということです。メニューに関連付けられたウィンドウハンドルがあります— TrackPopupMenuEx(あなたの質問に対するIssamの回答HNDで)あなたが提供したハンドルです。そのウィンドウは、メニューがアクティブな間メッセージを受信し、メニューコマンドを実装しているオブジェクトにメッセージを転送する必要があります。ウィンドウにはウィンドウプロシージャがあり、ここでメニューインターフェイスとメソッドを呼び出す必要があります。記事には例があります。HandleMenuMsgHandleMenuMsg2

記事シリーズの他の部分では、メニューが「ほぼ」機能すると言ったときに間違いなくほのめかした他のことを取り上げています。第3部では、プロパティダイアログが表示される場所について説明します。パート7は、デフォルトの動詞の呼び出しについてです。シリーズ全体をお読みになることをお勧めします。すべてがC++であることを恐れないでください。ほとんどすべてのインターフェイスメソッドとAPI関数なので、問題なくDelphiに変換できるはずです。

于 2010-01-11T10:42:49.770 に答える