2010-11-19 5 views
0

Excel 11のフォームコントロールをクリックしてサウンドをトリガーしようとしています。クリップボードに特定のテキストが見つかった場合、clickイベントのハンドラはsndPlaySound32を使用してサウンドを再生しようとします。フォームコントロールをクリックして再生サウンドが発生する

場合、私は(機能sndPlaySound32宣言、および(簡体字)とそれを呼び出す私がコントロールをクリックしたときに

whatSound$ = "C:\WINDOWS\Media\Office97\Drop.wav" 
sndPlaySound32 whatSound$, &H0 

限り、Excelが前のアプリですと、その後すべてが正常に動作し、サウンドの再生しましたターゲットテキストはクリップボードにあります)、メモ帳のような別のアプリケーション(クリップボードにテキストを持ってきて、クリックが発生したときにExcelがフロントアプリケーションではない場合、コントロールの最初のクリックは生成されません)どんな音。以降のクリックは正常に動作します。フォーム上の他のイベントはこれに問題はなく、最初のクリックに対して正常に応答し続けます。

Excelがフロントアプリケーションでないときに、コントロールの最初のクリックでサウンドを再生するにはどうすればよいですか?

編集11/25/10: 私はボードのコメントを作成できません。私は[コメントを追加]をクリックしますが、私のコメントは表示されませんので、これはBoostへの返信です。

Excelの最初のクリックだけではなく、他のアプリが前面に表示されている間に、Excelの最初のクリックで正常にトリガされるアクションがいくつかあるため、彼らはすべてうまく動作します。それ以降のクリックまで機能しないのはplaySoundだけです。

私は、各クリックで発生するはずの他のアクション(フォントの変更、テキストのサイズ変更など)のリストの先頭と最後の両方にplaySoundコマンドを移動しようとしましたが、様々な場所で、しかし喜びはありません。コードをステップ実行すると、最初のクリックでplaySoundプロシージャが正しく呼び出されますが、サウンドは生成されません。

+0

メモ帳がインフォーカスのアプリケーションである場合、正しく画像を取得した場合、Excelをクリックすると何も起こりませんが、その後のクリックが機能します。ここで問題となるのは、最初のクリックでExcelにフォーカスが移った後、Excelのコントロールがマウスのクリックを受け入れることです。これについて考える必要がありますか... – bugmagnet

答えて

1

私はここに修正があるとは思わない。アプリケーションは、「フォーカス中」になるまでマウスイベントを受け付けません。メモ帳にフォーカスがある場合、最初のクリックでフォーカスをExcelに転送すると、Excelのイベントハンドラが再生され、後続のイベントに応答します。

透明なウィンドウを画面全体に置き、マウスのクリックをそのコンテキストで解釈し、適切な基礎となるウィンドウに渡すことができます(それは可能かどうかわかりません)。 SMOP、私は思います。

0

最後に、シンプルで信頼性が高く、醜い回避策が見つかりました。最初のクリックでは音が再生されないので、もう一度チャンスを与えます。だから今、私のオリジナルのポスト内のコードの代わりに、それは次のようになります。

whatSound$ = "C:\WINDOWS\Media\Office97\Drop.wav" 
sndPlaySound32 whatSound$, &H0 
sndPlaySound32 whatSound$, &H0 

それはまだ最初のplaySoundコマンドを無視しますが、それは最初のクリックで二番目のたびに果たしています。

関連する問題