- Особенности языка mql5, тонкости и приёмы работы
- Индикатор от индикатора
- Значения спреда
С 3-го захода нашел )) если это оно
bool ChartBringToTop(const long chart_ID=0) { //--- сбросим значение ошибки ResetLastError(); //--- покажем график поверх всех других if(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,true)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); return(false); } //--- успешное выполнение return(true); }
В общем в 4-ке 710 ни хрена не работает (влияет только на какой чарт переключится видимость после удаления чартов созданных с помощью ChartOpen)
Подскажите функцию для переключения видимости чарта по ChartID или хендлу, а то не могу найти.
Если такой нет, буду рад API-шной функции.
Вот тебе API. Работает на обоих терминалах.
#import "user32.dll" int GetAncestor(int hwnd,uint gaFlags); int BringWindowToTop(int hWnd); #import //+------------------------------------------------------------------+ //| OnStart | //+------------------------------------------------------------------+ void OnStart() { //--- сделать активным первый график int hwnd=(int)ChartGetInteger(ChartFirst(),CHART_WINDOW_HANDLE); hwnd=GetAncestor(hwnd,1); BringWindowToTop(hwnd); } //+------------------------------------------------------------------+
Подскажите функцию для переключения видимости чарта по ChartID или хендлу, а то не могу найти.
Если такой нет, буду рад API-шной функции.
Я открываю новый график с помощью ChartOpen и при открытии автоматически переключает видимость на этот новый чарт, а мне надо оставаться на старом.
Всё прекрасно работает. Код - только mql. Никакого API.
P.S. Скрипт есть в моём профиле, только скрипту нужно сменить расширение с *.mql5 на *.mql4.
В общем в 4-ке 710 ни хрена не работает (влияет только на какой чарт переключится видимость после удаления чартов созданных с помощью ChartOpen)
ChartRedraw(chart_ID);
В МТ4 не работает без:
ChartRedraw(chart_ID);
Спасибо огромное за API функции,
надо, наверное, на них по немного переходить - будет в разы надежнее чем тут городят от билда к билду
касаемо ChartRedraw не помогло:
//#import "user32.dll" //int GetAncestor(int hwnd,uint gaFlags); //int BringWindowToTop(int hWnd); //#import int OnInit() { EventSetTimer(5); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { EventKillTimer(); } void OnTimer() { //int hwnd=(int)ChartGetInteger(ChartID(),CHART_WINDOW_HANDLE); //hwnd=GetAncestor(hwnd,1); //BringWindowToTop(hwnd); ChartRedraw(); ChartBringToTop(); ChartRedraw(); } bool ChartBringToTop(const long chart_ID=0) { //--- сбросим значение ошибки ResetLastError(); //--- покажем график поверх всех других if(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,0,true)) { //--- выведем сообщение об ошибке в журнал "Эксперты" Print(__FUNCTION__+", Error Code = ",GetLastError()); return(false); } //--- успешное выполнение ChartRedraw(); return(true); }
ни чего не делает на деле код.
ни чего не делает на деле код.
Вы забыли указать ID графика, который нужно обновить. Обновляем не текущий, а тот, который назначили топовым.
ChartRedraw(chart_ID);
И вот так всегда. Сначала охаят метаквотов - багов мол понаделали, ненадёжно всё, а потом, когда всё выясняется, извинений в их адрес - ноль. Жаль...
И вот так всегда. Сначала охаят метаквотов - багов мол понаделали, ненадёжно всё, а потом, когда всё выясняется, извинений в их адрес - ноль. Жаль...
Вместо подлизывания в суть бы вникли. Скажите где я не прав и я буду рад, касаемо своих ошибок я всегда готов выслушать аргументы, вникнуть и извиниться.
Мне надо чтобы график переключался на тот на котором запущен эксперт с переодичностью 5 сек.
Все идеально работает с API, а вот как это сделать стандартными функциями расскажите, Артем - если тесты показали следующее:
//#import "user32.dll" //int GetAncestor(int hwnd,uint gaFlags); //int BringWindowToTop(int hWnd); //#import long char_id; int OnInit() { char_id = ChartID(); EventSetTimer(5); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { EventKillTimer(); } void OnTick() { } void OnTimer() { //int hwnd=(int)ChartGetInteger(ChartID(),CHART_WINDOW_HANDLE); //hwnd=GetAncestor(hwnd,1); //BringWindowToTop(hwnd); long id = ChartFirst(); while(id > 0) { Print ("ID = " + string(id)); ChartRedraw(char_id); id = ChartNext(id); } ChartRedraw(); ChartRedraw(0); ChartRedraw(ChartID()); //ChartBringToTop(char_id); // Не работает если нет ChartRedraw(chart_ID); в ChartBringToTop ChartBringToTop(char_id); // Не работает если есть ChartRedraw(chart_ID); в ChartBringToTop //ChartBringToTop(ChartFirst()); // Не работает если нет ChartRedraw(chart_ID); в ChartBringToTop //ChartBringToTop(ChartFirst()); // Ура работает если есть ChartRedraw(chart_ID); в ChartBringToTop // Как круто - только не то что мне надо, мне надо переключиться на char_id ChartRedraw(); ChartRedraw(0); ChartRedraw(ChartID()); id = ChartFirst(); while(id > 0) { Print ("ID = " + string(id)); ChartRedraw(char_id); id = ChartNext(id); } ChartRedraw(0); Print (ChartID()); } bool ChartBringToTop(const long chart_ID=0) { ResetLastError(); if(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,0,true)) { Print(__FUNCTION__+", Error Code = ",GetLastError()); return(false); } ChartRedraw(chart_ID); // работает если только не текущий график и если есть в этом месте ChartRedraw //long id = ChartFirst(); //while(id > 0) //{ // Print ("ID = " + string(id)); // ChartRedraw(char_id); // id = ChartNext(id); //} return(true); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования