Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересуешься социальным трейдингом? Прочти соответствующую статью!
pansa
582
pansa 2014.08.31 10:34 

Добрый день,форумчане!

нашел  в инете заготовку для расширения

функции  выдачи звука!

можно выставить время (как долго)

должно звенеть,

если ты занят более приятным  чем форех!

Кто может из этои заготовки сделать

работающую    функцию?

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

 Print ("Exiting the pause loop after ",TimeCurrent()-play_time," sec.  Playd: ",file_to_play);

Brought By Highlightly

         Print ("Exiting the pause loop after ",TimeCurrent()-play_time," sec.  Playd: ",file_to_play);

Dmitry Fedoseev
42865
Dmitry Fedoseev 2014.08.31 11:37  

Все не так просто. Если делать просто, будет привязка к тикам, что нарушит равномерность проигрывания файлов.

Что бы было хорошо надо использовать таймер. Если использовать таймер, значит функция не будет работать в скриптах. Если не использовать таймер, а использовать Sleep(), будет работать в скрипте, но не будет в индикаторе (при этом в скрипте и индикаторе будет задержка всех действий).

К тому же, если использовать таймер, то использование функции усложняется (уже не будет той простоты: скопировал функцию, вызвал функцию).

Проще запускать плеер через WinExec().

Еще проще - сделать длинный звуковой файл и его использовать. 

pansa
582
pansa 2014.08.31 13:40  
привет, интегер!
вы хорошо объяснили проблемы
с этим скриптом.
тем неменее проблема надежного звука
остается!я уже давно обращал внимание
на вызов микрософт плеера для выдачи
других форматов  мп,мп3,мп4.....
тогда при профите-танец  с саблями а
потерях-реквием....
вы могли бы на  этом заработать
по всему миру нашлись бы покупатели!
панса
Dmitry Fedoseev
42865
Dmitry Fedoseev 2014.08.31 15:15  

Берите за так

 

 #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);


}

Dmitry Fedoseev
42865
Dmitry Fedoseev 2014.08.31 15:17  
Код не вставляется, получается пустота.
Alexey Viktorov
6679
Alexey Viktorov 2014.08.31 15:21  
Integer:
Как код не вставляется, получается пустота.

#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);


}

Странно, у меня вставляется...

pansa
582
pansa 2014.08.31 17:11  
Привет,интегер! Вообщем коде поместил я в скрипт при пуске скрипта вызывается микрософт плеер и проигрывает тада... чудесно -теперь осталось только повязать с ехпертом! уж обьясните пожалуйста! панса
pansa
582
pansa 2014.09.01 14:40  

Привет,интегер!

доведите  же  вызов плеера

из индикатора или ехперта

до конца-если будет хорошо

работать-куплю.

панса

Dmitry Fedoseev
42865
Dmitry Fedoseev 2014.09.01 15:02  

Ага, продам в обмен на веревку с мылом.

В приложении файл. Его скопировать в Include. Подключать к советнику или индикатору:

#include <WinMediaPlayer.mqh> 

В советнике или индикаторе вызывать функцию PlayInWinPlayer(string). В функцию передается один аргумент - имя файла (полный путь и имя), например "C:\\Windows\\Media\\tada.wav"

Извините, что без шуршащего пакетика и без золотистой ленточки, все кончались. 

Файлы:
pansa
582
pansa 2014.09.02 15:09  

вот ситуация!

уже все готово и надо готовую

функцию только разместить

в индикаторе и вызвать!

уже 2 дня бьюсь с едитором.

все сделал интегер ,теперь

видимо потерял интерес.

может кто может помочь?

панса

Dmitry Fedoseev
42865
Dmitry Fedoseev 2014.09.02 15:51  
Да уж рассказывайте в чем проблема, что не получается? Ошибки компиляции? Какие?
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий