2

Delphi XE アプリケーションで別のアプリケーションのウィンドウ内にポップアップ メニューを表示するにはどうすればよいですか? アイデアは、バックグラウンドで実行されるヘルパー タイプのアプリです。登録されたホットキーでは、アプリケーションはテキスト キャレットまたはマウス カーソルの近くにポップアップ メニューを表示する必要があります。

これを行うアプリケーションは一般的です。AutoHotkeyによって作成され、テキスト エディターに表示されるメニューを次に示します。

別のアプリケーションのウィンドウに追加されたポップアップ メニュー

私が求めているのは、Delphi コントロールにアタッチせずに、任意の画面位置にポップアップ メニューを表示するにはどうすればよいかということだと思います。

4

2 に答える 2

3

TPopupMenu適切なメニュー項目で を作成します。表示する必要がある場合はPopup、画面座標の左上の位置を渡すだけです。

PopupMenu1.Popup(X, Y);
于 2012-02-18T21:32:54.547 に答える
2

@DavidHeffernan があなたの質問に答えましたが、適切な質問をしていない可能性があります。

あなたが与えた例を見てみましょう: ユーザーは任意のアプリケーションを実行しており、ホットキーを検出し、メニューを表示し、選択したメニュー項目 (そしておそらくユーザーのコンテキストなど) に基づいて何らかのアクションを実行できるようにしたいと考えています。カーソルの下の単語として)。これは、任意の画面座標でメニューを単純に表示するよりも複雑です。

私の推奨事項は、これを他のプログラミング言語で複製しようとする代わりに、AutoHotKey を使用することです。これに気付いていない場合は、コードで AutoHotKey スクリプトを実行できる可能性があります。IIRC、AHKスクリプトをコンパイルできるため、AHKをインストールする必要はなく、コンパイルされたスクリプトだけです。AHK は最も洗練されたソリューションではないかもしれませんが、深みと成熟度があります。

これが不可能な場合は、Windows フックと DLL インジェクションを調査することをお勧めします。既存のコードやフレームワークが見つからない限り、かなりの作業が必要になります。

この複雑さの理由は? 別のプログラムを (フォーカスの問題などに遭遇することなく) スムーズに拡張するには、コードをその別のプログラムの一部として実行する必要があります。このメカニズムは、DLL インジェクションを介して実行できます。ただし、それは最初のステップにすぎません。コードが適切なコンテキストで実行されると、コードは「ホスト」プログラムと相互運用する必要があります。これは難しい場合があります (Windows メッセージングと Windows API の経験が豊富な場合に役立ちます)。これを任意のプログラムでスムーズに動作させたい場合は、さらに困難になります。

于 2012-02-18T22:10:05.193 に答える