Галерея UI написанных на MQL - страница 46

 
Реter Konow #:

Продожу выкладывать код нескольких окон в день (чтобы было легче разобраться).

Готовлю релиз на следующую пятницу-субботу. 

Основные поставленные задачи:

  • Реализовать программное управление элементами и окнами со стороны пользовательского приложения.
  • Подготовить/отладить функционал необходимый для работы пользователя с таблицами.
  • Исправить серьезные баги с вкладками и таскбаром.
  • Исправить мелкие баги.


  • Cделать так, чтобы движок в момент "симбиозной" компиляции с польз.программой загружал только выбранные ресурсы.

Приветствую! У меня единственный вопрос: Ваша библиотека работает под отладчиком в визуальном режиме? Конкретно, нужны только реакция на нажатие кнопок и перетаскивание стандартных горизонтальных линий. В МТ5 по OnChartEvent все работает в отладчике, в МТ5 уже лет 7 не могут справиться с «ужасной проблемой». Может, Вы эти глюки смогли обойти?

 
Alexey Volchanskiy #:

Приветствую! У меня единственный вопрос: Ваша библиотека работает под отладчиком в визуальном режиме? Конкретно, нужны только реакция на нажатие кнопок и перетаскивание стандартных горизонтальных линий. В МТ5 по OnChartEvent все работает в отладчике, в МТ5 уже лет 7 не могут справиться с «ужасной проблемой». Может, Вы эти глюки смогли обойти?

К сожалению, нет. Интерфейс не работает в режиме Debugging на МТ5. Ничего не мог сделать.

Спасибо что подняли эту тему. Нужно проверить работу отладчика на стандартно написанной программе подключенной к моему графическому движку. 
 
Реter Konow #:
...

...Нужно проверить работу отладчика на стандартно написанной программе подключенной к моему графическому движку. 

Считаю проблема вполне решаемая. Во время отладки пользователь отсоединит движок закомментировав строку подключения, затем перенаправит вызов его функционала в пустышки открыв специальную строку #include:

//+------------------------------------------------------------------+
//|                                                  EA Shell v1.mq5 |
//|                        Copyright 2024, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//#include<(1) KIB 1.0\(4) CONNECTIONS\KIB-DRIVE CONNECTIONS.mqh>
//+------------------------------------------------------------------+
#include<(1) KIB 1.0\DEBUG_MODE.mqh> 
//--------------------------------------------------------------------
#include<(2) KIB PROJECTS\(5) USER PROJECTS\Project 1\UIDATA.mqh>
//--------------------------------------------------------------------
#include<(2) KIB PROJECTS\(5) USER PROJECTS\Project 1\API.mqh> 
//+------------------------------------------------------------------+
 

Вся связь между польз. программой и движком осуществляется через несколько функций.  В первую очередь это OnChartEvent(). Также OnInit(), OnTimer(), OnDeinit(). Больше никаких связей с движком, только с файлами API и UIDATA. Но там почти самодостаточный функционал и если отключить движок и включить пару пустышек, ошибок не возникнет. Просто GUI перестанет работать, но он и так не работает в режиме отладки.

Считаю, можно реализовать отключение движка для проведения дебаггинга польз. программы.

 

//------------------------------------------------------ 
//DECLARE A NEW WINDOW
//------------------------------------------------------ 
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/             W_TYPE, DIALOG,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/         W_NAME, "Incorrect settings", 
//------------------------------------------------------
/*SET WINDOW'S CAPTION*/        CAPTION, "Error", 
//------------------------------------------------------
/*NAME (CAPTION)IN THE MIDDLE*/ NIM,  
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/      W_ICON, "::Images\\16x16\\No.bmp",   
//------------------------------------------------------
/*ONLY CLOSING BUTTON*/         ONLY_CLOSING, 
//------------------------------------------------------
/*WINDOW ALWAYS ON TOP*/        ALWAYS_ON_TOP, 
//------------------------------------------------------
/*OPEN WINDOW WITH A SOUND*/    OPENING_SOUND,"::Sounds\\Windows Foreground.wav", 
//------------------------------------------------------ 
/*WINDOW OPENS AT START*/       //OPEN_ON_INIT,  /*(OOI)*/
//------------------------------------------------------
/*LOCK WINDOWS IF OPENED*/      LOCKS_WINDOWS, ALL_WINDOWS,   
//------------------------------------------------------
/*MARGINS OF THE WINDOW*/       MARGINS, 20,20,/*Х, Y*/
//------------------------------------------------------
  
//------------------------------------------------------ 
GROUP, A,
//-----------------------------------------------
__, T_BOX,  "T1",TEXT,
                 "INCORRECT VALUES!",
                 END, 
//-----------------------------------------------                
__, T_BOX,  "T2",TEXT,
                 "Please change settings.",
                 END,
//-----------------------------------------------                
END_GROUP,
//-----------------------------------------------
i, AT, _X2X, "MF",   1, _Y2Y, "MF", 1,
//-----------------------------------------------
"T1", _A3_,0,
"T1", W,250,
"T1", H,40,
//-----------------------------------------------
"T1", text,_C1_,55,
"T1", text,_C2_,10,
//-----------------------------------------------
"T1", text,N_COLOR,(int)clrWhite,
"T1", FONT_SIZE,10,
"T1", TEXT_FONT,"Arial Black",
//-----------------------------------------------
"T1", NG_LINES,20, 
"T1", NG_STEP,1,
"T1", H_GRADIENT,
"T1", N_COLOR,(int)C'255,1,1',
//-----------------------------------------------
"T2", _A3_,0,
"T2", W,250,
"T2", H,20,
//-----------------------------------------------
"T2", text,_C1_,65,
"T2", text,_C2_,3,
//-----------------------------------------------

//-----------------------------------------------
GROUP, A,
//----------------------------------------------- 
__, LABEL,A, N_LABEL,"::Images\\32x32\\Wrong.bmp", 
//----------------------------------------------- 
END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 5,
//-----------------------------------------------

//----------------------------------------------- 
GROUP, A,
//----------------------------------------------- 
__,CHECKBOX, "More details", A_TEXT,"Fewer details",  
//----------------------------------------------- 
   GAP,95, 
//-----------------------------------------------    
   D_BUTTON, "Close", W,50,
                     //-----------------
                     _,CWIP,/*CLOSE WINDOW IF PRESSED*/
                     //-----------------
                     _,N_FRAME_COLOR,(int)C'51,153,255', 
                     //-----------------
                     BREAK_ROW_LINE,
//----------------------------------------------- 
END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2H, "T2", 10,
//--------------------------
//-----------------------------------------------

END_WINDOW,
 

//------------------------------------------------------ 
//DECLARE A NEW WINDOW
//------------------------------------------------------ 
NEW_WINDOW,  
//------------------------------------------------------
/*SET WINDOW TYPE*/             W_TYPE, DIALOG,  
//------------------------------------------------------
/*WRITE WINDOW'S NAME*/         W_NAME, "Processing the data...", 
//------------------------------------------------------
/*SET WINDOW'S CAPTION*/        CAPTION, "Please wait...", 
//------------------------------------------------------
/*NAME (CAPTION)IN THE MIDDLE*/ NIM,  
//------------------------------------------------------
/*POINT TO WINDOW'S ICON*/      W_ICON, "::Images\\16x16\\No.bmp",   
//------------------------------------------------------
/*ONLY CLOSING BUTTON*/         ONLY_CLOSING, 
//------------------------------------------------------
/*WINDOW ALWAYS ON TOP*/        ALWAYS_ON_TOP, 
//------------------------------------------------------
/*OPEN WINDOW WITH A SOUND*/  //OPENING_SOUND,"::Sounds\\Windows Foreground.wav",  
//------------------------------------------------------ 
/*WINDOW OPENS AT START*/     //OPEN_ON_INIT,   
//------------------------------------------------------
/*LOCK WINDOWS IF OPENED*/    //LOCKS_WINDOWS, ALL_WINDOWS,       
//------------------------------------------------------
/*MARGINS OF THE WINDOW*/       MARGINS, 10,10,/*Х, Y*/
//------------------------------------------------------
//----------------------------------------------------------------------------------
GROUP, A,

__, T_BOX,  "T1",TEXT,
//------------------------------------------------------
                 "Processing the data...",
//------------------------------------------------------
                 END, 
//------------------------------------------------------           
__, REC,    "T2", _A3_,0, _,W,450, _,H,70, _,N_COLOR,(int)C'255,255,255',
//------------------------------------------------------
                 
END_GROUP,
//--------------------------
i, AT, _X2X, "MF",   1, _Y2Y, "MF", 1,
//--------------
"T1",_A3_,0,
"T1", W,450,
"T1", H,40,
//--------------
"T1",text,_C1_,55,
"T1",text,_C2_,10,
"T1",text,N_COLOR,(int)C'255,255,255',
"T1",FONT_SIZE,10,
"T1",TEXT_FONT,"Arial Black",
//--------------
"T1",NG_LINES,75, 
"T1",NG_STEP,1,
"T1",H_GRADIENT,
"T1",N_COLOR,(int)C'255,155,155',
//--------------
//----------------------------------------------------------------------------------------------------
GROUP, A,
//------------------------------------------------------
__, LABEL,A, N_LABEL,  "::Images\\32x32\\Wait.bmp",   
//------------------------------------------------------
END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 5,
//----------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------
GROUP, A,
//------------------------------------------------------
__, P_BAR,"P1",  W,400, 
//-------------------------------------------
               _,H,15, 
               //--------------------------- 
               _,V_CURRENT, 38,
               //--------------------------- 
               _,N_COLOR,(int)C'230,230,230', 
//------------------------------------------------------
END_GROUP,
//-----------------------------------
i, AT, _C2C, "T2", 0, _C2C, "T2", 10,
//----------------------------------------------------------------------------------

GROUP, A,
//----------------------------------------------------------------------------------
__, VALUE,"V1",  W,35, _,H,20, _,FONT_SIZE,12,_,N_COLOR,(int)clrWhite, _,UNITS__,"%",_,V_CURRENT, 58, 
//----------------------------------------------------------------------------------
    GAP,3,   
//----------------------------------------------------------------------------------    
    BOARD,"complete", FONT_SIZE,11, _,N_COLOR,(int)C'255,255,255',
//----------------------------------------------------------------------------------                                       
    GAP,220,   
//----------------------------------------------------------------------------------    
    I_BUTTON, "IB1",  
//----------------------------------------------------------------------------------    
    GAP,30,   
//----------------------------------------------------------------------------------    
    I_BUTTON,"IB2", 
//----------------------------------------------------------------------------------    
    BREAK_ROW_LINE,
//----------------------------------------------------------------------------------
END_GROUP,
//-----------------------------------
i, AT, _X2X, "P1", 0, _H2Y, "P1", -5,
//-----------------------------------
i,  I_BUTTONS,    W,17, 
                  //---------------------------
                  H,17, 
                  //---------------------------
                  N_COLOR,(int)clrWhite, 
                  //---------------------------
                  label,N_SHADOW,0, 
                  //---------------------------
                  label,P_SHADOW,0, 
                  //---------------------------
                  label,A_SHADOW,0, 
                  //---------------------------
                  label,A_MOVE,0, 
                  //---------------------------
                  END,
//----------------------------------------------------------------------------------

//----------------------------------------------------------------------------------
GROUP, A,

__,CHECKBOX, "More details", A_TEXT,"Fewer details", 
//-------------------------------------------
   GAP,95, 
//-------------------------------------------   
   D_BUTTON, "Cancel", CWIP,
                      //--------------------
                      _,N_FRAME_COLOR, (int)C'51,153,255', 
                      //--------------------
                      BREAK_ROW_LINE,
//------------------------------------------
END_GROUP,
//------------------------------------------
i, AT, _X2X, "MF", 10, _Y2H, "T2", 10,
//----------------------------------------------------------------------------------
END_WINDOW,
 
Реter Konow #:

В последнем окне есть "ошибка". Прогресс бар фактически показывает 38%, а написано 58%. 

На самом деле все верно, потому что так указано в коде:

__, P_BAR, "P1", V_CURRENT, 38,


....

И в другой строке:

__, VALUE, "V1",  

указано: _,V_CURRENT, 58,

Отсюда путаница. Пропустил по невнимательности.

Что касается кнопок, то просто не нашел прежние картинки. Там специальный крестик был, и значек паузы. Постараюсь найти и исправить.
 

Петр у тебя беда с краями иконок. Сильно режет глаз. 

Это потому, что не замешиваешь цвет, который используется альфа-канал с фоном.
вот нужная функция смешивания цвух цветов, в которых используется альфа-канал.

void MixColor(uint clr, uint &addr) { // mix the color in the cell at addr with the color clr and enter the new value in the same cell
   if (GETRGBA(addr) == 0) {
      addr = clr;
      return;
   }
   union argb {
      uint clr;
      uchar c[4];
   } C;
   C.clr = clr;
   if (C.c[3] == 0) return;
   if (C.c[3] == 255) {
      addr = clr;
      return;
   }
   argb Bg;
   Bg.clr = addr;
   float a = C.c[3] / (float)255.0;
   float b = Bg.c[3]/ (float)255.0;
   float ab = b+a-b*a;
   C.c[3]=uchar(ab*255+0.49999);
   if (ab>0.002) {
      float a0 = a/ab;
      float a1 = b*(1-a)/ab;
      C.c[2] = uchar(C.c[2]*a0+Bg.c[2]*a1);
      C.c[1] = uchar(C.c[1]*a0+Bg.c[1]*a1);
      C.c[0] = uchar(C.c[0]*a0+Bg.c[0]*a1);
   }
   addr = C.clr;
}
так же можешь подсмотреть работу с png
https://www.mql5.com/en/code/45439
PNG
PNG
  • www.mql5.com
Forget about BMP files like a bad dream. Thanks to this library, you can now use the PNG format, which has a number of advantages, such as being more compact without losing image quality and maintaining transparency.
 
Nikolai Semko #:

Петр у тебя беда с краями иконок. Сильно режет глаз. 

Это потому, что не замешиваешь цвет, который используется альфа-канал с фоном.
вот нужная функция смешивания цвух цветов, в которых используется альфа-канал.

так же можешь подсмотреть работу с png
https://www.mql5.com/en/code/45439
Привет, Николай! 

Беды нет, потому что это такие иконки. Обрати внимание, иконки размером 16×16 в порядке (гораздо меньше режут глаз). Только иконки 32×32 имеют этот дефект. Причина в источнике из которого я их скачал. :)

Нужно просто "украсть" более качественные лейблы. Лол.

Ну а в общем, ты прав. Лучше работать с цветом.

 
Реter Konow #:
Привет, Николай! 

Беды нет, потому что это такие иконки. Обрати внимание, иконки размером 16×16 в порядке. Только иконки 32×32 имеют этот дефект. Причина в источнике из которого я их скачал. :)

Нужно просто "украсть" более качественные лейблы. Лол.

сейчас много источников с нормальными png иконками с прозрачным фоном. 

Например:
https://pngtree.com/so/colored-icons

Смотри сам, конечно, но твой GUI будет выглядеть намного качественнее без этих артефактов по краям.

Colored Icons PNG Images | 1230000+ Vector Icon Packs | Free Download On Pngtree
Colored Icons PNG Images | 1230000+ Vector Icon Packs | Free Download On Pngtree
  • pngtree.com
Are you searching for Colored icon png images or vector? Choose from 1230000+ Colored icons vector download in the form of PNG, EPS, AI or PSD.