2010-11-19 110 views
0

我试图通过单击窗体控件在Excel 11的处理程序中单击事件触发一个声音试图如果它发现在剪贴板上的某些文本播放使用sndPlaySound32声音。通过点击表单控件触发播放声音

我已经声明了功能sndPlaySound32,并与(简体)

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

只要Excel是正面的应用程序调用它,当我点击控制,然后一切工作正常,并播放声音(如果目标文本是在剪贴板上找到的),但是如果我将文本从其他应用程序(如记事本)导入到剪贴板中,其中Excel在单击时不是前端应用程序,则第一次单击该控件时不会生成任何声音。后续点击正常工作。表单上的其他事件对此没有任何问题,并继续对第一次点击进行正常响应。

我怎样才能让在控制的第一次点击播放声音时,Excel是不是前面的应用程序?

编辑10年11月25日: 我不能让董事会评论工作。我点击添加评论,但我的评论没有显示,所以这是对Boost的回复。

我认为这比仅仅通过第一次点击将Excel带到前台更深层次,因为在控件上第一次点击成功触发了其他几个操作(而另一个应用程序在前面),以及他们都工作得很好。只有playSound在随后的点击之前无法使用。

我试着将playSound命令同时移动到前面和其他动作列表的末尾(例如字体更改,文本大小调整等),每次点击都会发生,并尝试将延迟在各个地方,但没有喜乐。如果我单步执行代码,playSound程序会在第一次点击时被正确调用,但它不会产生声音。

+0

如果我正确明白了,当记事本是聚焦的应用程序,你点击Excel和没有任何反应,但随后的点击工作。好的,这里的问题在于,第一次点击将Excel引入焦点,然后Excel的控件接受鼠标点击。应该有一个这样的想法... – bugmagnet 2010-11-22 13:43:44

回答

1

我不认为这里有修复。应用程序在“焦点”之前不会接受鼠标事件。如果记事本处于焦点状态,您将通过第一次点击将焦点从其转移到Excel,然后Excel的事件处理程序将进入游戏并响应后续事件。

你可以(我不知道,如果它甚至有可能)把一个透明窗口,在整个屏幕,并解释这方面的鼠标点击,并传递给相应的底层窗口。 SMOP,我想。

0

我终于找到了解决方法这是简单的,可靠的,和丑陋。由于它不会在第一次点击时播放声音,我只是再给它一次机会。所以,现在,以代替原来的职位代码,它看起来像这样:

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

它仍然忽略了第一playSound命令,但是它扮演的第二个第一点击每一次。