Скриншот всего терминала - страница 2

 
Evgeny Potapov:

Я не умею писать на С.

повод научиться :-)

там строчек 15-20..на шарпе и того меньше

 
Maxim Kuznetsov:

повод научиться :-)

там строчек 15-20..на шарпе и того меньше

Это надо что-то устанавливать?

 
Evgeny Potapov:

Это надо что-то устанавливать?

тут на сайте где-то были статьи как писать на C# или С++ в MQL. 

с иллюстрациями и пояснениями, что ставить куда наживать как использовать

Поищите, или подождите - люди подскажут точную ссылку

 
Maxim Kuznetsov:

тут на сайте где-то были статьи как писать на C# или С++ в MQL. 

с иллюстрациями и пояснениями, что ставить куда наживать как использовать

Поищите, или подождите - люди подскажут точную ссылку

Статей разных в Интернете много, но мне надо то, что не устарело, что лучше подходит к моему случаю.

Я не знаю даже: C# - позволяет делать dll независимые от версии Windows?

 
Три OBJ_CHART не спасут отца русской демократии?
 
Andrey Khatimlianskii:
Три OBJ_CHART не спасут отца русской демократии?

Это интересная идея!

То есть вы предлагаете создать на графике три других графика, и скриншотить их?

Но я не знаю, как в этих объектах сделать прокрутку на нужную дату, и как добавлять в них вертикальные линии.

 
Evgeny Potapov:

Это интересная идея!

То есть вы предлагаете создать на графике три других графика, и скриншотить их?

Но я не знаю, как в этих объектах сделать прокрутку на нужную дату, и как добавлять в них вертикальные линии.

Да.

Не знаю, получится ли. Не работал с ними плотно. Пробуйте.

 
Evgeny Potapov:

"наблуды" тоже желательны, правда, в другой ситуации, когда хочется зафиксировать в скриншоте и последние сообщения терминала. Но, в данном случае, это можно отложить.

Насколько я помню BMP форматов несколько, я даже не знаю какой используется в МТ4.

Может быть у вас есть пример кода или ещё что-то полезное?

Индикатор при нажимании клавиши "P" делает три скриншота с разными тайфреймами, склеивает их, выводит склейку на экран с заданной прозначностью и сохраняет это в новый скриншот "ScreenShot.png"( в каталоге Files)

прозрачность = 255


прозрачность = 200

#property strict
#property indicator_chart_window
#include <Canvas\iCanvas.mqh> //https://www.mql5.com/en/code/23840

input uchar tr=200; // прозрачность 0..255

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int wait=0;
string fileName[3];
int OnInit()
  {
   for(int i=0; i<3; i++)
      fileName[i]="screen_"+string(i)+".bmp";
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[])
  {
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   while(wait!=0)
     {
      int file_handle=FileOpen(fileName[wait-1],FILE_READ|FILE_BIN);
      if(file_handle==-1)
        {
         return;
        }
      int h=W.Height/3;
      int w=W.Width;
      uchar f[];
      uint size=FileReadArray(file_handle,f);
      if(size!=(h*w*4+54)) // на всякий случай проверяем правильность размера файла. 54 байта - это шапка bmp файла, дальше массив пикелей 
         return;
      ArrayCopy(f,f,0,54);
      //ArrayResize(bmp,w*h));
      union UCI
        {
         uchar h[4];
         uint  u;
        };
      UCI z;
      for(int x=0; x<w; x++)
         for(int y=0; y<h; y++)
           {
            int adr=(((h-1)-y)*w+x)*4;
            z.h[0]=f[adr];   //синий
            z.h[1]=f[adr+1]; //зеленый
            z.h[2]=f[adr+2]; //красный
            z.h[3]=tr ;      //прозрачность от 0 до 255
            Canvas.m_pixels[w*(y+(wait-1)*h)+x]=z.u;
           }

      FileClose(file_handle);
      FileDelete(fileName[wait-1]);
      if(wait==3)
         wait=0;
      else
         wait++;
     }
   Canvas.Update();
   ChartScreenShot(0,"ScreenShot.png",W.Width+49,W.Height+24);
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_KEYDOWN && sparam=="25" && wait == 0) // нажата клавиша P
     {
      ScreenShot();
     }
  }
//+------------------------------------------------------------------+
void ScreenShot()
  {
   Canvas.Erase();
   ChartSetSymbolPeriod(0,NULL,PERIOD_M1);
   ChartScreenShot(0,fileName[0],W.Width,W.Height/3);
   ChartSetSymbolPeriod(0,NULL,PERIOD_M5);
   ChartScreenShot(0,fileName[1],W.Width,W.Height/3);
   ChartSetSymbolPeriod(0,NULL,PERIOD_M15);
   ChartScreenShot(0,fileName[2],W.Width,W.Height/3);
   wait=1;
   EventSetMillisecondTimer(10);
  }
//+------------------------------------------------------------------+
Файлы:
iCanvas.mqh  22 kb
 
Nikolai Semko:

Индикатор при нажимании клавиши "P" делает три скриншота с разными тайфреймами, склеивает их, выводит склейку на экран с заданной прозначностью и сохраняет это в новый скриншот "ScreenShot.png"( в каталоге Files)

прозрачность = 255


прозрачность = 200


а вот зачем такое ? альфа-каналы, тени, спецэффекты...на стену повесить вместо обоев ??  

существует более практическая задача, или зачем вообще делать скриншот всего терминала:

чтобы зафиксировать состояние. Например после удачного/неудачного открытия/закрытия. Или в конце дня для балансового отчёта. Чтобы и самому посмотреть и другим показать (например в спорных моментах с DC)

на таких скриншотах должен быть заснят чарт, окно обор рынка и вкладка навигатора "торговля". То есть привычный для трейдера и причастных вид

 
Evgeny Potapov:

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

Список дат - около сотни.

смотря что наблюдаем

не проще ли написать индикатор?