Графика в MetaTrader 5: Canvas - рисование внутри буфера с привязкой к объектам - страница 2

 

Вот если бы можно было расширить набор графики четверки за счет отрисовки имеющихся объектов с привязкой к пикселям как лейбы (мечтательно), то не пришлось бы мне корячиться...

А так только моим способом.

 

IgorM: понаблюдай за таким скриптом

Погоди, он у меня не исполняется. Пытаюсь обновиться до 619, пока не выходит. Не могу найти LiveUpdate.

Удаление terminal.ini не помогает.

P.S. Поставил поверх, не дождался автоматического через LiveUpdate. Все нормально, заголовочный файл теперь компилится.

В первом варианте с Update() в цикле все работает. Чтобы видеть, надо бы цвет фона другой сделать, у меня голубой. Да, Update() - медленная операция, тут бы OpenCL пригодился (если действительно нужен быстрый апдейт)... в ChartRedraw() :)

Во втором, когда Update() вне цикла, все проходит мгновенно, даже не успеваешь ничего увидеть. Я поставил Sleep( 3000 ):

#include <Canvas.mqh>

void OnStart(){
   CCanvas can;
   can.Create("MySpace",0,0,800,800,COLOR_FORMAT_ARGB_RAW);
   can.FillRect(0,0,800,800,XRGB(0,0,255));
   for(int x=0;x<800;x++){
      can.SetPixel(x,MathSin(3.1415*0.005*x)*100+200,0);
      ///can.Update();
     }
   can.Update();
   Sleep( 3000 );
  }
//+------------------------------------------------------------------+
P.P.S. Было бы неплохо, если бы можно было загружать на простыню какой-нибудь битмап или его отдельные части.
 
Mathemat:

Да, Update() - медленная операция, тут бы OpenCL пригодился (если действительно нужен быстрый апдейт)... в ChartRedraw() :)

Метод Update перестраивает ресурс и вызывает полную перерисовку экрана. Поэтому это медленный способ, прямо зависящий от производительности видеокарты.

void CCanvas::Update(void)
  {
//--- обновляем ресур и вызываем перерисовку
   if(ResourceCreate(m_rcname,m_data,m_width,m_height,0,0,0,m_format))
      ChartRedraw();
  }

При перерисовке объект-владелец картинки понимает, что у него привязка к динамическому битмапу и проверяет его неизменность в менеджере ресурсов. Если битмап изменился, то он копируется в объект и отрисовывается.

За счет использования ресурс-менеджера c динамической привязкой битмапов к объекту мы получили возможность независимо и без блокировок обновлять ресурсы в виде битмапов простой функцией ResourceCreate().


P.P.S. Было бы неплохо, если бы можно было загружать на простыню какой-нибудь битмап или его отдельные части.

Функция ResourceLoad появится в следующем билде и позволит вычитывать в память (массивы) ранее импортированные через #resource "filename" файлы.

То есть, можно будет вычитывать битмапы в память, потом дорисовывать их и выводить на экран.

Фактически новыми функциями мы превращаем язык MQL5 и формат EX5 в полноценные программы, которые к тому же не зависят от битности операционки и вполне платформонезависимы.


Не сомневаюсь, что скоро появятся изумительные программы, рисующие прямо поверх чартов с использованием прозрачности.
 
IgorM:

по сабжу: великолепная новость! еще не гуглил, а насколько сложно выводить/прикрутить на канвас текст(шрифты)?

Шрифты будут, включая графические функции с антиальясингом для более качественного вывода.
 

а как насчет моего вопроса ???

Вот если бы можно было расширить набор графики четверки за счет отрисовки имеющихся объектов с привязкой к пикселям как лейбы ...

 
Renat:Шрифты будут, включая графические функции с антиальясингом для более качественного вывода.

даже нет слов, просто фантастика! :)
 
FAQ:

а как насчет моего вопроса ???

К сожалению, этот вопрос давно закрыт.
 
Renat:
К сожалению, этот вопрос давно закрыт.


Спасибо, отрицательный результат - тоже результат. :)
 
Mathemat:

Погоди, он у меня не исполняется. Пытаюсь обновиться до 619, пока не выходит. Не могу найти LiveUpdate.

Удаление terminal.ini не помогает.

P.S. Поставил поверх, не дождался автоматического через LiveUpdate. Все нормально, заголовочный файл теперь компилится.

В первом варианте с Update() в цикле все работает. Чтобы видеть, надо бы цвет фона другой сделать, у меня голубой. Да, Update() - медленная операция, тут бы OpenCL пригодился (если действительно нужен быстрый апдейт)... в ChartRedraw() :)

Во втором, когда Update() вне цикла, все проходит мгновенно, даже не успеваешь ничего увидеть. Я поставил Sleep( 3000 ):

P.P.S. Было бы неплохо, если бы можно было загружать на простыню какой-нибудь битмап или его отдельные части.

Не понял. Откуда у тебя Canvas.mqh ?

У меня билд 619, и никакого Canvas.mqh тут нет. И не компилится, естественно. И Ренат писал "в следующих билдах..". Может таки добавили в сборку после того как я обновился?

Кароче : если он у тебя есть - кидай прямо сюда, плиз.

 
MetaDriver:

Не понял. Откуда у тебя Canvas.mqh ?

У меня билд 619, и никакого Canvas.mqh тут нет. И не компилится, естественно. И Ренат писал "в следующих билдах..". Может таки добавили в сборку после того как я обновился?

Кароче : если он у тебя есть - кидай прямо сюда, плиз.

Посмотрите первое сообщение в этой ветке - там и текстом написано "файлы приложены" и файлы в аттаче лежат.
Причина обращения: