新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1057

 
Alexey Viktorov:

刚刚检查过,可以改变。但这一变化将是针对终端的所有警报。而如果你想在每个条件下使用PlaySound(),你应该使用它,但不要在别人的函数中使用,要自己了解它的工作原理。

PlaySound() 的工作与警报无关。

我试了一下,它播放两个声音都是Alert和PlaySound()。

 
MakarFX:

谢谢你,它成功了。

但它并没有解决事件分离的问题

再一次

终端设置 中,禁用警报声

在MQL代码中,使用PlaySound()输出声音,然后调用Alert() - 所以你会为不同的警报得到不同的声音,而且你不能只是为警报分配一个声音,然后从MQL代码中以编程方式改变它。

 
Igor Makanu:

再次

终端设置 中,禁用警报声

在MQL代码中,使用PlaySound()输出声音,然后调用Alert() - 因此,你会为不同的警报获得不同的声音,而且不可能将任何声音分配给警报,然后从MQL代码中以编程方式改变它。

反之亦然,先是Alert()然后是PlaySound()。否则PlaySound()甚至没有时间开始播放,Alert()会覆盖它。

 
Igor Makanu:

再次

终端设置 中,禁用警报音


你的意思是放一个空的声音,因为如果你在设置中禁用警报,它根本不工作。

 
Alexey Viktorov:

反之亦然,先是Alert()然后是PlaySound()。否则PlaySound()甚至没有时间开始播放,Alert()就会杀死它。

也许,还没有检查过。

PlaySound() 有一个有趣的地方,我想我需要在它和Alert之间加上Sleep(150),但这并不是什么大问题。

 
Igor Makanu:

也许,没有检查

PlaySound()有一些技巧,我想我们需要在它和警报之间添加Sleep(150),但这没什么用。

谢谢你。
 
Igor Makanu:

也许,没有检查

PlaySound()有点麻烦,我想我需要在它和警报之间加上Sleep(150),但这不是什么大问题。

名称为空的PlaySound() 停止播放当前正在播放的声音。

 
MakarFX:

你的意思是把空的声音,因为如果你在设置中关闭警报,它根本不工作。

我花了很长时间来阅读代码。我不是一个真正的编码员,但在那里的功能中,注意开头的以下内容。

外部 bool UseSound = False; // 使用声音

可能需要把数值改为True,并且已经把你的声音附加到这个函数上。它不应该与警报器连在一起,而是与警报器分开。

在代码的末尾(就是你之前写的那段),有如下内容

无效的Signal(string st) {

如果(UseAlert)Alert(st)。

{ if (UseComment) Comment(st);

如果(UseSendMail)SendMail(WindowExpertName(), st)。

如果(UseSendPush)SendNotification(st)。

如果(UsePrint)Print(st)。

如果(使用声音)PlaySound(sotFileName)。

}


我理解这些是由Signal函数执行的变量。因此,这个信号函数在其代码中有几个事件选项。而对于每个事件,我需要添加必要的价值(声音)。


如果我完全混淆了这个问题,让程序员们来纠正我吧 :)

 
Vitaliy Maznev:

我花了很长时间来阅读代码。我不是一个真正的编码员,但在那里的功能中,请注意开头的以下内容。


如果我完全混淆了这个问题,让程序员们来纠正我吧 :)

主要问题是关于根据事件使用不同的声音。UseSound只适用于PlaySound功能,不影响Alert的操作。

 
MakarFX:

主要问题是关于根据事件触发不同声音的警报。UseSound仅指PlaySound功能,不影响Alert的操作。

所以在这种情况下,Alert和Playsound功能是可以互换的,对吗?还是我弄错了?如果你不能在Alert函数中写入变量,而且你对自定义声音感兴趣,那么在每个需要的事件中用Playsound((UseAlert)与(UseSound)) 代替Alert。而且你会得到你所需要的东西。至少,在逻辑上是这样。

原因: