//+------------------------------------------------------------------+ //| [s]Menu(v00).mq4 | //| Copyright © 2011, MetaQuotes Software Corp. | //| (c)n-i-k-gena | //+------------------------------------------------------------------+ #property copyright "(c)n-i-k-gena" //___________________глобальные переменные МЕНЮ_A_____________________ int X_MenuA=200, Y_MenuA=30; //начальные (исходные) координаты МЕНЮ_A () bool A[11]; //массив флагов - состояний пунктов МЕНЮ_A () bool isMenuA=1; // (0)свернуть/(1)развернуть Меню_A () //+------------------------------------------------------------------+ //| script program start function |start(); //+------------------------------------------------------------------+ int start() {while (!IsStopped()) {//---- MenuA(); //<<<==================================ВЫЗОВ ФУНКЦИИ //_1.пункт Меню _ //CheckBox// "Включить/Отключить" if (A[1]) PrintManual(); //если [v] - вывести описание if(!A[1]) DelObj("Obj#Manual>"); //если [ ] - удалить описание //_2.пункт Меню_ //Run// "Выполнить" if (A[2]) PlaySound("news.wav"); // >>> выполнить оператор PlaySound() //_3/4/5.пункты Меню_ //RadioButton// "Bыбор одного из пунктов Меню" //if(A[3])cMan=Pink; B функции PrintManual() ( ) //if(A[4])cMan=Lime; выбор одного (о) //if(A[5])cMan=Blue; из трёх цветов ( ) //_6.пункт Меню_ //Run// "Выполнить" if (A[6]) break; // >>> удалить (закрыть) скрипт Sleep(200); }//---- return(0); } //+------------------------------------------------------------------+ //| МЕНЮ A .(v00) | MenuA(); //+------------------------------------------------------------------+ int MenuA() { // () static int xУМ, yУМ, timerУМ, timerЗАГ, timerППМ, xLast, yLast, Z0; static bool isInit; bool isMoveЗАГ, isHideM; int i, ii, x, y, Z; string ObjMenu= "Obj#MenuA>"; //общий префикс имён граф.объектов MenuA () string ObjУМ = ObjMenu+"УМ"; //имя граф.объекта УМ(Управляющая Метка) string ObjЗАГ = ObjMenu+"ЗАГ"; //имя графического объекта ЗАГОЛОВОК ObjMenu = ObjMenu+0; //префикс графических объектов ПУНКТ Меню color cУМ=Yellow; //цвет УМ (Управляющая Метка) color cActY=Goldenrod; //цвет Активность графического объекта color cActN=Silver; //цвет Неактивность графического объекта color cППМ=White; //цвет Подтверждение Пункта Меню int dx=30, dy=5; // смещение между УМ и ЗАГОЛОВКОМ, пиксели int yy=20; //расстояние между пунктами Меню, пиксели int pAct=1; //номер пункта Активности Меню (0 - всегда активно) () int ZZ=6; //количество пунктов Меню string tx[7]; //массив названий пунктов меню (размер = ZZ+1) //заполняем массив названиями пунктов меню: i=0; tx[i]="ЗАГОЛОВОК МЕНЮ_A_"; // ЗАГОЛОВОК меню i++; tx[i]="[v]Включить описание программы"; // 1. пункт меню i++; tx[i]=" Выполнить PlaySound( )"; // 2. пункт меню i++; tx[i]="( )Выбрать цвет текста PINK"; // 3. пункт меню i++; tx[i]="(o)Выбрать цвет текста LIME"; // 4. пункт меню i++; tx[i]="( }Выбрать цвет текста BLUE"; // 5. пункт меню i++; tx[i]=" УДАЛИТЬ СКРИПТ [s]MENU !"; // 6. пункт меню if(!isInit){isInit=true; ObjectDelete(ObjУМ);//начальная инициализация for(i=1;i<=ZZ;i++) if(StringSubstr(tx[i],1,1)!=" ")A[i]=true; } Z=0; A[Z0]=0; Z0=0; //сброс ранее установленного пункта Меню if(GetTickCount()0) if(x!=(xУМ+dx)||y!=(yУМ+dy))//обновляем координаты Меню (УМ) {xУМ=x-dx; yУМ=y-dy; isMoveЗАГ=true; timerЗАГ=GetTickCount()+1500; } x = ObjectGet(ObjУМ, OBJPROP_XDISTANCE); //УМ, Координата Х y = ObjectGet(ObjУМ, OBJPROP_YDISTANCE); //УМ, Координата Y if(x==0 && y==0) {xУМ=X_MenuA; yУМ=Y_MenuA; ObjectDelete (ObjЗАГ);} Z=(y+yy/2-yУМ)/yy; //вычисляем Пункт меню Z if(Z==0 && x>xУМ)isHideM=true;//<УМ бросили на ЗАГОЛОВОК-свернуть Меню if((Z>ZZ)||(Z<0))Z=0; if(!isMenuA)Z=0; if(isMoveЗАГ){Z=0; isHideM=0;} //ждем 0.5 сек, пока двигается УМ; если не двигается >0.5c-->дальше if(x!=xУМ || y!=yУМ) if(x!=xLast || y!=yLast) if(!isMoveЗАГ) {xLast=x; yLast=y; timerУМ=GetTickCount()+500; return(0);} xLast=0; yLast=0; if(xУМ<0)xУМ=0; if(yУМ<0)yУМ=0; if(x!=xУМ||y!=yУМ) ObjectDelete(ObjУМ); //если сдвинули, удалить УМ ObjectCreate (ObjУМ, OBJ_LABEL, 0, 0, 0); ///////УПРАВЛЯЮЩАЯ МЕТКА_УМ ObjectSet (ObjУМ, OBJPROP_TIMEFRAMES, NULL); //все ТаймФреймы ObjectSet (ObjУМ, OBJPROP_CORNER, 0); //Привязка угол ObjectSet (ObjУМ, OBJPROP_XDISTANCE, xУМ); // УМ, Координата Х ObjectSet (ObjУМ, OBJPROP_YDISTANCE, yУМ); // УМ, Координата Y ObjectSetText(ObjУМ, ">>", 14, "Arial Black", cУМ); //___ЛОГИКА ОБРАБОТКИ ПУНКТОВ МЕНЮ____ //RUN//пункты Меню "Выполнить": if(StringSubstr(tx[Z],0,1)==" ") {A[Z]=1; Z0=Z;} //___// //CHECKBOX//пункты Меню "Включить/Отключить": if(StringSubstr(tx[Z],0,1)=="[") A[Z]=!A[Z]; //[v]// //RADIOBUTTON//выбор одного из нескольких пунктов Меню: i=3; if(Z==i){A[3]=1; A[4]=0; A[5]=0;} //( )// i=4; if(Z==i){A[3]=0; A[4]=1; A[5]=0;} //(o)// i=5; if(Z==i){A[3]=0; A[4]=0; A[5]=1;} //( )// if(isHideM){isMenuA=!isMenuA;} //свернуть/развернуть Mеню for(i=1;i<=ZZ;i++) //----------ЦИКЛ вывода пунктов меню {if(StringSubstr(tx[i],0,1)=="[") { if(A[i])tx[i]=StringSetChar(tx[i],1,'v'); else tx[i]=StringSetChar(tx[i],1,' '); } if(StringSubstr(tx[i],0,1)=="(") { if(A[i])tx[i]=StringSetChar(tx[i],1,'o'); else tx[i]=StringSetChar(tx[i],1,' '); } if(StringSubstr(tx[i],0,1)==" ") { if(A[i])tx[i]=StringSetChar(tx[i],1,'>'); else tx[i]=StringSetChar(tx[i],1,' '); } ObjectDelete (ObjMenu+i); if(isMenuA) ObjectCreate(ObjMenu+i, OBJ_LABEL,0,0,0);//(i)ПУНКТ Меню ObjectSet (ObjMenu+i, OBJPROP_TIMEFRAMES, NULL); //все ТаймФреймы ObjectSet (ObjMenu+i, OBJPROP_CORNER, 0); //Привязка угол ObjectSet (ObjMenu+i, OBJPROP_XDISTANCE, xУМ);//пункт меню,Коорд.Х ObjectSet (ObjMenu+i, OBJPROP_YDISTANCE, yУМ+i*yy); //Координата Y color cПМ=cActY; if(Z==i)cПМ=cППМ;//cППМ-цвет подтверждения выбора ПМ ObjectSetText(ObjMenu+i, tx[i], 10, "Arial", cПМ); } if(isMoveЗАГ || isHideM || (Z>0) || (GetTickCount() " X=" + xУМ+" Y=" + yУМ+" Z=" + Z; Comment(txCom); //Comment < - > isHideM=false; isMoveЗАГ=false; if (Z>0)timerППМ=GetTickCount()+1000; WindowRedraw(); return(Z); } //+------------------------------------------------------------------+ //| Функция: УДАЛЕНИЕ ГРАФИЧЕСКИХ ОБЪЕКТОВ | DelObj(); //+------------------------------------------------------------------+ int DelObj(string nameBeg) { for(int i=ObjectsTotal()-1;i>=0;i--) {string nameObj=ObjectName(i); if(StringFind(nameObj,nameBeg)==0) ObjectDelete(nameObj);} return(0); } //+------------------------------------------------------------------+ //| Custom deinitialization function | deInit(); //+------------------------------------------------------------------+ int deinit() { DelObj("Obj#"); WindowRedraw(); Comment(""); return(0); } //+------------------------------------------------------------------+ // // // // // // //+------------------------------------------------------------------+ //| Функция: ВЫВОД ОПИСАНИЯ ПРОГРАММЫ | PrintManual(); //+------------------------------------------------------------------+ int PrintManual() { string ObjMan="Obj#Manual>"; string tx[12]; color cMan; if(A[3])cMan=Pink; //( ) if(A[4])cMan=Lime; //(о) (RadioButton)"Bыбор одного из пунктов Меню" if(A[5])cMan=Blue; //( ) tx[00]="__ОПИСАНИE ПРОГРАММЫ [s]MENU__"; tx[01]="1.Выбор пункта Меню:"; tx[02]=" -выделить Двойную Стрелку"; tx[03]=" -перетащить её на нужный пункт Меню"; tx[04]="2.Перемещение Меню по графику:"; tx[05]=" -выделить ЗАГОЛОВОК Меню"; tx[06]=" -перетащить его на другое место"; tx[07]="3.Свёрнуть/Развернуть Меню:"; tx[08]=" -выделить Двойную Стрелку"; tx[09]=" -перетащить её на ЗАГОЛОВОК"; tx[10]="4.Восстановить координаты Меню:"; tx[11]=" -выделить Двойную Стрелку"; tx[12]=" -удалить её (клавиша Delete)"; for(int i=0;i<=12;i++) {ObjectCreate (ObjMan+i, OBJ_LABEL, 0, 0, 0); ObjectSet (ObjMan+i, OBJPROP_TIMEFRAMES, NULL); ObjectSet (ObjMan+i, OBJPROP_CORNER, 0); ObjectSet (ObjMan+i, OBJPROP_XDISTANCE, 500); ObjectSet (ObjMan+i, OBJPROP_YDISTANCE, 30+i*20); ObjectSetText(ObjMan+i, tx[i], 9, "Arial", cMan); } return(0); } //+------------------------------------------------------------------+