Добавить BMP файл в советник - страница 2

 

Пример:

//+------------------------------------------------------------------+
//|                                             OBJ_BITMAP_LABEL.mq5 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
string label_name="currency_label";       // имя объекта OBJ_BITMAP_LABEL 
#resource "\\Images\\euro.bmp"            // имя ресурса - Images\euro.bmp 
#resource "\\Images\\dollar.bmp"          // имя ресурса - Images\dollar.bmp 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- создадим кнопку OBJ_BITMAP_LABEL, если ее еще нет
   if(ObjectFind(0,label_name)<0)
     {
      //--- попробуем создать объект OBJ_BITMAP_LABEL
      bool created=ObjectCreate(0,label_name,OBJ_BITMAP_LABEL,0,0,0);
      if(created)
        {
         //--- привяжем кнопку к правому верхнему углу графика
         ObjectSetInteger(0,label_name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
         //--- теперь настроим свойства объекта
         ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,100);
         ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,50);
         //--- сбросим код последней ошибки в 0
         ResetLastError();
         //--- загрузим картинку для состояния кнопки "Нажата"
         //--- использование ресурсов 
         bool set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,0,"::Images\\euro.bmp");
         //--- проверим результат
         if(!set)
           {
            PrintFormat("Не удалось загрузить картинку из ресурса. Код ошибки %d",GetLastError());
           }
         ResetLastError();
         //--- загрузим картинку для состояния кнопки "Отжата"
         //--- использование ресурсов 
         set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,1,"::Images\\dollar.bmp");

         if(!set)
           {
            PrintFormat("Не удалось загрузить картинку из ресурса. Код ошибки %d",GetLastError());
           }
         //--- отдадим графику команду на обновление, чтобы кнопка появилась сразу же, не дожидаясь тика
         ChartRedraw(0);
        }
      else
        {
         //--- объект создать не удалось, сообщим об этом
         PrintFormat("Не удалось создать объект OBJ_BITMAP_LABEL. Код ошибки %d",GetLastError());
        }
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- удалим объект с графика 
   ObjectDelete(0,label_name);
  }
//+------------------------------------------------------------------+

после компиляции скопируйте скомпилированный файл в другое место, а папку Image временно переименуйте. 

Файлы:
 
Karputov Vladimir:

Проверять лучше на очень простых примерах.

В том-то и дело, что на очень простых примерах всё тип-топ. Но мы же не пишем очень простые "Hello World", правильно?
 
Artyom Trishkin:
В том-то и дело, что на очень простых примерах всё тип-топ. Но мы же не пишем очень простые "Hello World", правильно?
А я тебе давно говорю - панельки должны базироваться на классе диалогов :)
 
Karputov Vladimir:
А я тебе давно говорю - панельки должны базироваться на классе диалогов :)

Значит по-твоему весь мир должен быть однообразен ;)

Не нравятся мне эти "топорные" стандартные панели.

 
Спасибо большое Владимир! Наконец-то разобрался)) Респект вам! 
 
Владимир! У меня получилось тока без canvas. В canvas , я использую LoadFromFile и он не находить через ресурс, а через каталог находит! Получается canvas через ресурс не работает? Спасибо!
 
Aibek Mugiynov:
Владимир! У меня получилось тока без canvas. В canvas , я использую LoadFromFile и он не находить через ресурс, а через каталог находит! Получается canvas через ресурс не работает? Спасибо!

Канвас работает с ресурсами:

//+------------------------------------------------------------------+
//|                                           Inversion_resource.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Canvas\Canvas.mqh>
//---
uint     res_width=0;      // ширина ресурса
uint     res_height=0;     // высота ресурса
#resource "\\Images\\euro.bmp"            // имя ресурса - Images\euro.bmp 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   CCanvas canvas;
   ResetLastError();
//--- create canvas
   if(!canvas.CreateBitmapLabel("BmpLabel",50,50,100,100,COLOR_FORMAT_ARGB_NORMALIZE))
     {
      Print("Error CreateBitmapLabel: ",GetLastError());
      return;
     }
   string name_resource=canvas.ResourceName();
   ResetLastError();
//--- загрузим картинку для состояния кнопки "Нажата"
//--- использование ресурсов 
   bool set=ObjectSetString(0,"BmpLabel",OBJPROP_BMPFILE,0,"::Images\\euro.bmp");
//--- проверим результат
   if(!set)
     {
      PrintFormat("Не удалось загрузить картинку из ресурса. Код ошибки %d",GetLastError());
     }
   res_width=canvas.Width();
   res_height=canvas.Height();
   canvas.Update();
   Sleep(15000);
//--- finish
   canvas.Destroy();
   return;
  }
//+------------------------------------------------------------------+

После компиляции переименуйте (временно) папку Images и запустите скомпилированный файл. 

 

Добавлено: строка

   string name_resource=canvas.ResourceName();

даже лишняя оказалась. 

Файлы:
 
Artyom Trishkin:
В том-то и дело, что на очень простых примерах всё тип-топ. Но мы же не пишем очень простые "Hello World", правильно?
Подтверждаю. Если работа с ресурсом идет глубоко в классах, то ресурс почему-то упорно не хочет находится.
 
Vasiliy Sokolov:
Подтверждаю. Если работа с ресурсом идет глубоко в классах, то ресурс почему-то упорно не хочет находится.

Недавняя заявка в сервисдеск.

Andrey Barinov 2016.04.22 07:53

 Ошибку 4009 пофиксил, стало все работать и без ResetLastError(). 

Получается что наличие ошибки в _LastError мешает работе функции ResourceReadImage()... 

Support Team 2016.04.22 11:50

Спасибо за сообщение.

Действительно, в MT5, значение _LastError (код текущей ошибки) влияло на результат функции. 

Исправлено.
 
Andrey Barinov:

Недавняя заявка в сервисдеск.

... 

Support Team 2016.04.22 11:50

Спасибо за сообщение.

Действительно, в MT5, значение _LastError (код текущей ошибки) влияло на результат функции. 

Исправлено.


Причина обращения: