Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1057

 
Alexey Viktorov:

Только-что проверил, изменить можно. Но это изменение будет на все алерты для терминала. А если надо на каждое условие, то надо использовать PlaySound(), но не в чужой функции, а самому понять как это работает.

PlaySound(), работает независимо от Алерта.

Я пробовал, воспроизводится два звука и Алерт и 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() есть некие приколы, по моему нужно и Sleep(150) между ним и алертом добавить, но это мелочи

 
Igor Makanu:

возможно, не проверял

там с PlaySound() есть некие приколы, по моему нужно и Sleep(150) между ним и алертом добавить, но это мелочи

Спасибо.
 
Igor Makanu:

возможно, не проверял

там с PlaySound() есть некие приколы, по моему нужно и Sleep(150) между ним и алертом добавить, но это мелочи

PlaySound() с пустым именем останавливает воспроизведение текущего проигрываемого звука.

 
MakarFX:

Вы имеете ввиду поставить пустой звук, потому что если в настройках отключить алерт, он вообще не работает

Долго читал код. Я не кодер реально, но там из функций которые есть, обратите внимание на следующее вначале:

extern bool   UseSound    = False;           // Использовать звук

Наверное нужно изменить значение на True и уже к этой функции прикреплять свой звук. Это чтобы не вместе с алертом, а отдельно от него.

В конце кода (то что вы ранее публиковали) там следующее:

void Signal(string st) {

  if (UseAlert) Alert(st);

  if (UseComment) Comment(st);

  if (UseSendMail) SendMail(WindowExpertName(), st);

  if (UseSendPush) SendNotification(st);

  if (UsePrint) Print(st);

  if (UseSound) PlaySound(sotFileName);

}


Я так понимаю это переменные, которые выполняются функцией Signal. Ну и соответственно в коде эта функция Signal прописана в нескольких вариантах событий. И вот уже к каждому этому событию прописывать нужное значение (звук).


Пусть меня поправят программисты если я совсем запутал вопрос :)

 
Vitaliy Maznev:

Долго читал код. Я не кодер реально, но там из функций которые есть, обратите внимание на следующее вначале:


Пусть меня поправят программисты если я совсем запутал вопрос :)

Суть вопроса была в том, чтоб Алерт срабатывал с разными звуками в зависимости от события. UseSound относится только к функции PlaySound и не влияет на работу Алерта

 
MakarFX:

Суть вопроса была в том, чтоб Алерт срабатывал с разными звуками в зависимости от события. UseSound относится только к функции PlaySound и не влияет на работу Алерта

Так функции Alert и Playsound в данном случае взаимозаменяемые же? Или я не правильно понял? Если нельзя прописать переменные в рамках функции Alert, а вас интересует именно пользовательский звук, то и заменить в каждом требуемом событии Alert на Playsound ((UseAlert) на (UseSound)). И получаем как раз то, что вам требуется. Во всяком случае, логически.

Причина обращения: