вот ещё вариант, т.е. создать график и поставить ему отображение не по верх всех окон:
//+------------------------------------------------------------------+//| Функция включает/выключает режим отображения ценового графика на |//| переднем плане. |//+------------------------------------------------------------------+bool ChartForegroundSet(constbool value,constlong chart_ID=0)
{
//--- сбросим значение ошибкиResetLastError();
//--- установим значение свойстваif(!ChartSetInteger(chart_ID,CHART_FOREGROUND,0,value))
{
//--- выведем сообщение об ошибке в журнал "Эксперты"Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- успешное выполнениеreturn(true);
}
•CHART_FOREGROUND – свойство отображения ценового графика на переднем плане.
//+------------------------------------------------------------------+//| Функция определяет, отображается ли ценовой график на переднем |//| плане. |//+------------------------------------------------------------------+bool ChartForegroundGet(bool &result,constlong chart_ID=0)
{
//--- подготовим переменную для получения значения свойстваlong value;
//--- сбросим значение ошибкиResetLastError();
//--- получим значение свойстваif(!ChartGetInteger(chart_ID,CHART_FOREGROUND,0,value))
{
//--- выведем сообщение об ошибке в журнал "Эксперты"Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
//--- запомним в переменную значение свойства графика
result=value;
//--- успешное выполнениеreturn(true);
}
В справке написано, что свойство CHART_BRING_TO_TOP имеет тип w/o, что означает, что данное свойство предназначено только для записи и не может быть получено.
Но помню, когда-то давно, обещали дать возможность и для чтения тоже. Забыли наверное. ))
Попробую сделать из того, что есть. Если получится, покажу пример.
гуру натолкнул на хорошую мысль, там объяснил, там рассказал и в целом очень помог.
В результате старания и просто логики мне удалось написать последовательность функций для получения родительского хендла текущего активного окна чарта.
Пусть не вводит в заблуждение простота (хотя да, сейчас уже все кажется простым):
int hchart = int(ChartGetInteger(chart_id, CHART_WINDOW_HANDLE));
int hhchart = GetAncestor(hchart, 1);
int hhhchart = GetAncestor(hhchart, 1);
int hwnd = GetTopWindow(hhhchart);
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
ALXIMIKS, 2014.09.30 00:40
спасибо за желание помочь, но у меня ситуация не штатная:
1. Експерт может открыть новые чарты - когда будет это событие - я не в курсе
2. В это врямя, когда эксперт еще не открыл новые окна, я могу смотерть любой угодный мне чарт или создать новый
3. Когда же эксперт создаст новое окно (чарт)- мене перекидывает на наго
4. Мне не надо новое окно, я хочу быть там где я был
5. Вот для этого и вопрос - КАК УЗНАТЬ ТЕКУЩИЙ куда я смотрю в данный момент ChartID или хендл ???
(п.с. касаемо приведенной вами функции - без ChartRedraw() именно внутри этой функции в МТ4 710(выше не проверял) работать ни чего не будет.)
ALXIMIKS, 2014.09.30 00:40
спасибо за желание помочь, но у меня ситуация не штатная:
1. Експерт может открыть новые чарты - когда будет это событие - я не в курсе
2. В это врямя, когда эксперт еще не открыл новые окна, я могу смотерть любой угодный мне чарт или создать новый
3. Когда же эксперт создаст новое окно (чарт)- мене перекидывает на наго
4. Мне не надо новое окно, я хочу быть там где я был
5. Вот для этого и вопрос - КАК УЗНАТЬ ТЕКУЩИЙ куда я смотрю в данный момент ChartID или хендл ???
(п.с. касаемо приведенной вами функции - без ChartRedraw() именно внутри этой функции в МТ4 710(выше не проверял) работать ни чего не будет.)
CHART_BRING_TO_TOPу каждого по очереди
и у кого это свойство равно true тот график и нужен, все остальные лесом
как нашли график с свойством равным true так запоминаем его ChartId, он же хендл.
и работаем по ID с графиком.
кроме как постоянно проверять какое окно сверху и сравнивать с последним состоянием, решения не вижу.
вот ещё вариант, т.е. создать график и поставить ему отображение не по верх всех окон:
barabashkakvn:
Зачем переносить тему из Ошибки, баги, вопросы?
У меня вот вопросы - упираются в ограничения mql, как мне кажется. И ту тему больше знающих людей будет просматривать.
так сказал же вроде, смотреть свойство графика
у каждого по очереди
и у кого это свойство равно true тот график и нужен, все остальные лесом
как нашли график с свойством равным true так запоминаем его ChartId, он же хендл.
и работаем по ID с графиком.
кроме как постоянно проверять какое окно сверху и сравнивать с последним состоянием, решения не вижу.
Да, спасибо, сразу не подумал, так как мне казалось, что данное свойство только для Set метода а не Get.
вот проверил:
ни так, ни сяк не работает - ошибка 4211 - График не найден
Касаемо CHART_FOREGROUND - ни чего не дало
(если не ошибаюсь это свойство выводит на передний план цену, если она заслоенна каким-то объектом)
Мои подозрения что нету штатных методов что бы узнать какой чарт активный в данный момент все более подтверждаются
Касаемо CHART_FOREGROUND - ни чего не дало
(если не ошибаюсь это свойство выводит на передний план цену, если она заслоенна каким-то объектом)
В справке написано, что свойство CHART_BRING_TO_TOP имеет тип w/o, что означает, что данное свойство предназначено только для записи и не может быть получено.
Но помню, когда-то давно, обещали дать возможность и для чтения тоже. Забыли наверное. ))
Попробую сделать из того, что есть. Если получится, покажу пример.
похоже что узнать какой график в фокусе стандартными методами нельзя, но можно через WinApi
кажется вот:
перебирать окна и смотреть фокус, только не известно фокус чего вернётся фокус терминала или фокус окна графика )
Связался с гуру (Zh)
гуру натолкнул на хорошую мысль, там объяснил, там рассказал и в целом очень помог.
В результате старания и просто логики мне удалось написать последовательность функций для получения родительского хендла текущего активного окна чарта.
Пусть не вводит в заблуждение простота (хотя да, сейчас уже все кажется простым):