Ошибки, баги, вопросы - страница 2194

 
Dmytro Zelenskyy:

Серьезный подход))

Ну тогда прям на том какой хотите скринить, на нем запускаете маленький скриптик один раз, который в глобальную переменную дает id (лучше временную глобальную перемен). 

А ваш скрипт по id скринит.

Хитрый ход!

Спасибо!
 
Dmytro Zelenskyy:

Даже если точно вычислить ширину скрина в пикселях, то скрин будет частично закрывать колонка цены.

Причем на разных разрешениях экрана она разная, у меня (1280х1024) от 50 до 60 зависит от кол-ва цифр валюты. На другом экране будет по другому.

Вот как выяснить какая ширина колонки, чтоб добавить эти пиксели к ширине скрина? (открыть в скрине то что закрыла колонка)


Привет от fxsaber:

//+------------------------------------------------------------------+
#define TOSTRING(A) #A + " = " + (string)(A) + "\n"
// Ширина вертикальной шкалы графика
int GetWidthScale(const long chartID=0)
  {
   const string Name=__FUNCTION__+(string)MathRand();

   ObjectCreate(chartID,Name,OBJ_CHART,0,0,0);
   ObjectSetInteger(chartID,Name,OBJPROP_XDISTANCE,-1e3);

   const long chart=ObjectGetInteger(chartID,Name,OBJPROP_CHART_ID);

   const int Res=(int)(ChartGetInteger(chart,CHART_WIDTH_IN_PIXELS) -
                  (ChartSetInteger(chart,CHART_SHOW,false) ? ChartGetInteger(chart,CHART_WIDTH_IN_PIXELS) : 0));

   ObjectDelete(chartID,Name);

   return(-Res);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(TOSTRING(GetWidthScale()));
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

Привет от fxsaber:

Дело мастера боится!!! 

Круто!

 
Artyom Trishkin:

Привет от fxsaber:

Код конечно очень интересный, но оказалось, что проблему не решает...

 
Проблема в том, что не ясно, как получить универсальную функцию(работающую с любым зумом и разной шириной шкалы), с помощью которой можно определить число пикселей до конкретного бара включительно.
 
Aleksey Vyazmikin:
Проблема в том, что не ясно, как получить универсальную функцию(работающую с любым зумом и разной шириной шкалы), с помощью которой можно определить число пикселей до конкретного бара включительно.

Ну перестаньте. Все отмычки здесь.
Ширина бара принимает только значения 1,2,4,8,16,32

Странно, но идентификатор CHART_POINTS_PER_BAR не работает.

Но ширину бара в пикселях можно легко вычислить:

int WidthBar=int(1<<ChartGetInteger(0,CHART_SCALE));
Левый бар всегда рисуется от центра, правый как угодно. Поэтому начало координат в нуле (слева).
 
Nikolai Semko:

Ну перестаньте. Все отмычки здесь.
Ширина бара принимает только значения 1,2,4,8,16,32

Странно, но идентификатор CHART_POINTS_PER_BAR не работает.

Но ширину бара в пикселях можно легко вычислить:

Левый бар всегда рисуется от центра, правый как угодно. Поэтому начало координат в нуле (слева).

Это теория, пока самый лучший (более точный) вариант это такой:

pp=(double)ChartGetInteger(handle,CHART_WIDTH_IN_PIXELS)/(double)ChartGetInteger(handle,CHART_WIDTH_IN_BARS)*((Shift_Start-Shift_Stop)*(-1)+2)+Schkala+3;

но и он дает сбои парой.

 
Aleksey Vyazmikin:

Это теория, пока самый лучший (более точный) вариант это такой:

но и он дает сбои парой.

:))
Сформулируйте чётко задачу. Какое значение вам нужно получить?
 
Nikolai Semko:
:))
Сформулируйте чётко задачу. Какое значение вам нужно получить?

Мне нужно сделать скрин от даты А до даты Б включительно. При этом отработка функции должна быть корректна на любом зуме.

 

По скриншоту сделал отдельную ветку, где описал проблему и выложил имеющийся у меня код - прошу знатоков помочь!

https://www.mql5.com/ru/forum/237291

Организация пакетной обработки задачи по снятия изображений с экрана графика
Организация пакетной обработки задачи по снятия изображений с экрана графика
  • 2018.04.15
  • www.mql5.com
Встала у меня задача доработать скрипт https://www.mql5.com/ru/code/936 , который делает скрины...
Причина обращения: