Все не так просто. Если делать просто, будет привязка к тикам, что нарушит равномерность проигрывания файлов.
Что бы было хорошо надо использовать таймер. Если использовать таймер, значит функция не будет работать в скриптах. Если не использовать таймер, а использовать Sleep(), будет работать в скрипте, но не будет в индикаторе (при этом в скрипте и индикаторе будет задержка всех действий).
К тому же, если использовать таймер, то использование функции усложняется (уже не будет той простоты: скопировал функцию, вызвал функцию).
Проще запускать плеер через WinExec().
Еще проще - сделать длинный звуковой файл и его использовать.
Берите за так
#property strict
#import "shell32.dll"
int ShellExecuteA(int hwnd,uchar & lpOperation[],uchar & lpFile[],uchar & lpParameters[],uchar & lpDirectory[],int nShowCmd);
#import
void OnStart(){
PlayInWinPlayer("C:\\Windows\\Media\\tada.wav");
}
void PlayInWinPlayer(string MediaFile){
uchar _lpFile[];
uchar _lpOperation[];
uchar _lpParameters[];
uchar _lpDirectory[];
string lpOperation="open";
string lpFile="C:\\Program Files\\Windows Media Player\\wmplayer.exe";
string lpParameters=MediaFile;
string lpDirectory="";
StringToCharArray(lpOperation,_lpOperation);
StringToCharArray(lpFile,_lpFile);
StringToCharArray(lpParameters,_lpParameters);
StringToCharArray(lpDirectory,_lpDirectory);
ShellExecuteA(0,_lpOperation,_lpFile,_lpParameters,_lpDirectory,1);
}
Как код не вставляется, получается пустота.
#property strict #import "shell32.dll" int ShellExecuteA(int hwnd,uchar & lpOperation[],uchar & lpFile[],uchar & lpParameters[],uchar & lpDirectory[],int nShowCmd); #import void OnStart(){ PlayInWinPlayer("C:\\Windows\\Media\\tada.wav"); } void PlayInWinPlayer(string MediaFile){ uchar _lpFile[]; uchar _lpOperation[]; uchar _lpParameters[]; uchar _lpDirectory[]; string lpOperation="open"; string lpFile="C:\\Program Files\\Windows Media Player\\wmplayer.exe"; string lpParameters=MediaFile; string lpDirectory=""; StringToCharArray(lpOperation,_lpOperation); StringToCharArray(lpFile,_lpFile); StringToCharArray(lpParameters,_lpParameters); StringToCharArray(lpDirectory,_lpDirectory); ShellExecuteA(0,_lpOperation,_lpFile,_lpParameters,_lpDirectory,1); }
Странно, у меня вставляется...
Привет,интегер!
доведите же вызов плеера
из индикатора или ехперта
до конца-если будет хорошо
работать-куплю.
панса
Ага, продам в обмен на веревку с мылом.
В приложении файл. Его скопировать в Include. Подключать к советнику или индикатору:
#include <WinMediaPlayer.mqh>
В советнике или индикаторе вызывать функцию PlayInWinPlayer(string). В функцию передается один аргумент - имя файла (полный путь и имя), например "C:\\Windows\\Media\\tada.wav".
Извините, что без шуршащего пакетика и без золотистой ленточки, все кончались.
вот ситуация!
уже все готово и надо готовую
функцию только разместить
в индикаторе и вызвать!
уже 2 дня бьюсь с едитором.
все сделал интегер ,теперь
видимо потерял интерес.
может кто может помочь?
панса
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день,форумчане!
нашел в инете заготовку для расширения
функции выдачи звука!
можно выставить время (как долго)
должно звенеть,
если ты занят более приятным чем форех!
Кто может из этои заготовки сделать
работающую функцию?
pansa
play_time=TimeCurrent();
PlaySound(file_to_play);
for( i = ArraySize(sound_stack)-1; i > 0; i --) //storing the last new played event
{
sound_stack[i]=sound_stack[i-1];
time_stack[i]=time_stack[i-1];
sound_stack[0]=file_to_play;
time_stack[0]=play_time;
}
while (TimeCurrent()-play_time<length)
{
first=StringFind(file_to_play,"[",0)+1;
second=StringFind(file_to_play,"]",first);
length=second-first;
if (length<1) length=1; // this var is used to extract the true length
length=StrToInteger(StringSubstr(file_to_play,first,length));
if (length<1) length=1; // this var is the true length (sec) of 'file_to_play' wav file
} // a way to force a pause letting a full play
Brought By Highlightly
Print ("Exiting the pause loop after ",TimeCurrent()-play_time," sec. Playd: ",file_to_play);