Обсуждение статьи "Графические интерфейсы XI: Нарисованные элементы управления (build 14.2)" - страница 3

 
Artyom Trishkin:

Толь, в какой из статей этого цикла можно почитать о CKeys ?

...

Т.е,: запускаю программу и начинаю нажимать Backspace- все управляющие элементы с каждым нажатием Backspace удаляются, начиная с последнего добавленного. В конечном итоге удаляется и уже ставшее пустым окно-форма.

...


Графические интерфейсы X: Элемент "Многострочное текстовое поле ввода" (build 8)

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

 
Artyom Trishkin:

Если в TestLibrary14 в Program.mqh вписать одну строчку - изменение цвета заголовка окна:

То сворачивание окна возвращает цвет к значению по умолчанию. А кнопки подсказок, сворачивания/разворачивания и закрытия окна перекрашиваются в цвет заголовка окна, который был программно установлен. А затем цвет этих кнопок изменяется на цвет по-умолчанию только при наведении курсора.

...

Забыл добавить изменение цвета заголовка формы по наведению курсора мыши. Будет в одном из следующих обновлений.

Сейчас цвет нужно установить для обоих состояний:

...
   m_window.CaptionColor(clrDimGray);
   m_window.CaptionColorHover(clrDimGray);
...

//---

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

...
   m_window.GetCollapseButtonPointer().BackColorHover(clrGray);
   m_window.GetTooltipButtonPointer().BackColorHover(clrGray);
//---
   m_window.GetCollapseButtonPointer().BackColorPressed(clrGray);
   m_window.GetTooltipButtonPointer().BackColorPressed(clrGray);
...

//---


 

По моему мнению, термин "ядро библиотеки", который употребляется в статье, не совсем корректен. Ранее употреблялся термин "движок" библиотеки, но и он не совсем подходит.

Под понятием "ядро" должен подразумеваться статический массив, объединяющий в себе всю необходимую информацию, а под понятием "движок" - механизм работающий с этой информацией и реализующий комплекс задач.

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

Если библиотека содержит ядро и движок, то это уже не совсем библиотека, а система работающая как единое целое.

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

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

имхо.

 

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

Очевидно, что растровые изображения отображаются правильно, но текст - нет. Он смещается вниз и обрезается, как показано на изображении ниже:

Я использую следующие настройки дисплея:


 
Artur Zas:

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

Очевидно, что растровые изображения отображаются правильно, но текст - нет. Он смещается вниз и обрезается, как показано на изображении ниже:

Я использую следующие настройки дисплея:


 
Facundo Laje:
Здравствуйте, можно ли его использовать в MT4?

 
Facundo Laje:
Здравствуйте, можно ли использовать эту библиотеку в MT4?

Технически, конечно, можно, так как OBJ-BITMAP_LABEL есть и в MQL4, но вам придется подправить код библиотеки, так как есть несколько мест, где код просто не будет компилироваться компилятором MQL4.

Я попробую поиграть с библиотекой и дам вам знать, если мне удастся как-то перенести ее на MQL4. Вы также можете попробовать сами. Просто переименуйте расширение .mq5 примера советника в .mq4 и попробуйте скомпилировать код.

Очевидно, что вы получите ошибки компиляции, однако вы можете проверить, где и что это такое.

 

Привет,

Я пытаюсь разработать свою собственную панель управления, следуя этой серии статей... Меня интересует часть о многооконном режиме (Статья04), но я использовал обновленную Библиотеку14 (Статья10).

Что у меня получилось на данный момент (на прилагаемых рисунках):


изображение1

изображение2

Что я упустил, потому что окна 2 и 3 не двигаются, не закрываются при нажатии кнопок закрытия и сворачивания...

Вот код частей окон 2 и 3:

//-------- Window2-------
#resource "\\Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp"
bool CmyPanel_Test2::CreateWindow2(const string caption_text)
  {
//--- Сохраните указатель окна
   CWndContainer::AddWindow(m_window2);
    m_window2.MainPointer(m_mb_contextmenu1);
//--- Координаты
   int x =(m_window2.X()>0) ? m_window2.X() : 100;
   int y =(m_window2.Y()>0) ? m_window2.Y() : 100;
//--- Свойства
   m_window2.Movable(true);
   m_window2.Alpha(200);
   m_window2.XSize(300);
   m_window2.YSize(100);
   m_window2.IconXGap(3);
   m_window2.IconYGap(2);
   m_window2.WindowType(W_DIALOG);
   m_window2.CloseButtonIsUsed(true);
   m_window2.GetCloseButtonPointer().Tooltip("Close");
   m_window2.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
   m_window2.IconFile("Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp");
//--- Создание формы
   if(!m_window2.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }
//------------------Window3----------------
bool CmyPanel_Test2::CreateWindow3(const string caption_text)
  {
//--- Сохраните указатель окна
   CWndContainer::AddWindow(m_window3);
    m_window2.MainPointer(m_menubar);
//--- Координаты
   int x =(m_window2.X()>0) ? m_window2.X() : 100;
   int y =(m_window2.Y()>0) ? m_window2.Y() : 100;
//--- Свойства
   m_window3.Movable(true);
   m_window3.Alpha(200);
   m_window3.XSize(200);
   m_window3.YSize(200);
   m_window3.IconXGap(3);
   m_window3.IconYGap(2);
   m_window3.WindowType(W_DIALOG);
   m_window3.CloseButtonIsUsed(true);
   m_window3.GetCloseButtonPointer().Tooltip("Close");
   m_window3.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
   m_window3.IconFile("Images\\EasyAndFastGUI\\Icons\\bmp16\\color_picker.bmp");
//--- Создание формы
   if(!m_window3.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }

, и часть OnEvent:

void CmyPanel_Test2::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {

   if(id==CHARTEVENT_CUSTOM+ON_CLICK_MENU_ITEM)
     {
      PRINT_EVENT(ON_CLICK_MENU_ITEM,id,lparam,dparam,sparam);
      return;
     }
//---
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_BUTTON)
     {
     PRINT_EVENT(ON_CLICK_BUTTON,id,lparam,dparam,sparam);
     
     if(lparam==1 && dparam==1)
     {
      m_window3.Show();
      return;
     }
      return;
     }
//---
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_CONTEXTMENU_ITEM)
     {
      if (dparam==0)
      m_window2.Show();
      PRINT_EVENT(ON_CLICK_CONTEXTMENU_ITEM,id,lparam,dparam,sparam);
      return;
     }

Спасибо.

 
zlory73:

Привет,

Я пытаюсь разработать свою собственную панель управления, следуя этой серии статей... Меня интересует часть о многооконном режиме (статья 04), но я использовал обновленную библиотеку 14 (статья 10).

Что у меня получилось на данный момент (на прилагаемых рисунках):


Что я упустил, потому что окна 2 и 3 не двигаются, не закрываются при нажатии кнопок закрытия и сворачивания...

Вот код частей окон 2 и 3:

, и часть OnEvent:

Спасибо.


Извините, изменил:

bool CmyPanel_Test2::CreateWindow3(const string caption_text)
  {
//--- Сохраните указатель окна
   CWndContainer::AddWindow(m_window3);
    m_window3.MainPointer(m_window);

и:

bool CmyPanel_Test2::CreateWindow2(const string caption_text)
  {
//--- Сохраните указатель окна
   CWndContainer::AddWindow(m_window2);
    m_window2.MainPointer(m_window);

все равно ничего...

Пожалуйста, помогите1

 
Artur Zas:

Технически, конечно, должна, поскольку OBJ-BITMAP_LABEL доступна и в MQL4, но вам придется подправить код библиотеки, поскольку есть несколько мест, где код просто не будет компилироваться компилятором MQL4.

Я попробую поиграть с библиотекой и дам вам знать, если мне удастся как-то перенести ее на MQL4. Вы также можете попробовать сами. Просто переименуйте расширение .mq5 примера советника в .mq4 и попробуйте скомпилировать код.

Очевидно, что вы получите ошибки компиляции, однако вы можете проверить, где и что это такое.