Библиотеки: EasyAndFastGUI - библиотека для создания графических интерфейсов - страница 22

 

Привет, коллеги!

Мне удалось уменьшить количество варнингов с 18 до 6 с помощью замены имени объекта на "CElementBase::".

И те 6 сводятся к 4 типам ошибок, которые привожу ниже. Помогите, пожалуйста, их корректно забороть.

1. Как корректно заменить "m_tabs.GetButtonPointer(m_selected_tab)." текстом "CElementBase::"?

//--- Определим цвет для линии
   color clr=m_back_color;
   if(m_tabs.GetButtonPointer(m_selected_tab).IsLocked()) // this one!
      clr=m_tabs.GetButtonPointer(m_selected_tab).BackColorLocked();
//--- Рисуем линию
   m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(clr,m_alpha));
  }


2. И здесь - когда я заменяю "el." текстом "CElementBase::" - возникает новая ошибка компиляции "IsAvailable - access to non-static member of function" - как корректно пофиксить этот варнинг?

      for(int e=0; e<elements_total; e++)
        {
         //--- Проверяем только доступные элементы
         CElement *el=m_wnd[m_active_window_index].m_elements[e];
         if(!el.IsVisible() || !el.IsAvailable() || el.IsLocked())
            continue;
         //--- Обработка события в обработчике элемента
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }


3. Та же линия: когда я заменяю "el.IsLocked()" текстом "CElementBase::IsLocked" : error "IsLocked - access to non-static member of function"

4. И последнее - чем корректно заменить "m_windows[0].IsLocked()"?

//--- Выйти, если интерфейс не создан
   if(windows_total<1)
      return;
//--- Изменить размер всех элементов заблокированной формы, если включен один из режимов
   if(m_windows[0].IsLocked() && (m_windows[0].AutoXResizeMode() || m_windows[0].AutoXResizeMode()))
     {

Было бы здорово использовать эту библиотеку, но сперва необходимо решить эти проблемы.


Заранее спасибо!

Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
  • www.mql5.com
Static Members of a Class - Object-Oriented Programming - Language Basics - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Yevgen Drumachyk:

Привет, коллеги!

Мне удалось уменьшить количество варнингов с 18 до 6 с помощью замены имени объекта на "CElementBase::".

el.CElementBase::IsLocked() ?
 
Edgar Akhmadeev:
el.CElementBase::IsLocked() ?

Edgar Akhmadeev, спасибо тебе большое, Коллега!

Сработало! ))

 

Приветствую, коллеги!

Подскажите, пожалуйста, как с помощью данной библиотеки создать два окна? Пишу советник, состоящий их двух окон: 1) торговая панель, и 2) Watch List. 

Первой окно с торговой панелью создается и работает без проблем:

CWindow           m_window;

CreateWindow(m_window,"META TOOLS",1,1,175,200,false,false,true,true) + добавление кнопок:


Но когда добавляю:

CWindow           m_watchlist_window;

CreateWindow(m_watchlist_window,"Watch List",150,1,100,150,false,false,true,false)

CreateButton(m_watchlist1_btn,"EURUSD",m_watchlist_window,0,245,25,60,30)

то кнопка EURUSD появляется в воздухе... то есть не создается еще одного отдельного окна... почему?



Создание этого UI происходит к контексте: class CProgram : public CWndCreate

Создание UI завершаю командой

CWndEvents::CompletedGUI()


Подскажите, пожалуйста, удавалось ли вам создавать много-оконный UI?

Я сейчас именно про два независимых окна. Т.е. вариант с появляющимся диалоговым окном (типа как для настроек) - не подходит. Нужно, чтобы оба окна были всегда видны и независимо кликабельны. Почему отдельные окна? Потому, что первое - торговая панель - фиксированный размер. Вторая - Watch List - размер окна меняется по мере добавление или уменьшения количества добавленных в него элементов.

 

Привет, ребята!

Удалось ли вам создать более 1 независимого окна с помощью этой библиотеки? То есть вызывать метод WindowCreate() более одного раза для создания дополнительных окон на графике в рамках одного и того же эксперта?

У меня получается успешно создать 1 окно. Но вот при попытке создать 2-ое - оно НЕ появляется...

Есть идеи, почему?

Или пример, как вам удалось создать дополнительные окна (не диалоги).

Спасибо!

 
Yevgen Drumachyk:

Подскажите, пожалуйста, как с помощью данной библиотеки создать два окна? 


Никак. Все строится вокруг одного основного окна. Одна из причин почему я начал писать свою библиотеку )

 
Oleksii Chepurnyi:

Никак. Все строится вокруг одного основного окна. Одна из причин почему я начал писать свою библиотеку )

Спасибо, Oleksii Chepurnyi! Хотелось бы всё-таки обойтись этой библиотекой. Уж очень здорово она сделана.


Ребята, ещё есть версии? Может кто-то обошел эту проблему и смог создать больше, чем 1 окно?

К коде библиотеки видно, что вновь создаваемое окно добавляется в "общий массив элементов". Значит окон может быть больше, чем одно?.. Обратите внимание на этот кусок кода в библиотеке:



//+------------------------------------------------------------------+
//| Добавляет указатель окна в базу элементов интерфейса             |
//+------------------------------------------------------------------+
void CWndContainer::AddWindow(CWindow &object)
  {
   int windows_total=::ArraySize(m_windows);
//--- Если окон ещё нет, обнулим счётчик элементов
   if(windows_total<1)
     {
      m_counter_element_id=0;
      ::Comment("Loading. Please wait...");
     }
//--- Добавим указатель в массив окон
   int new_size=windows_total+1;
   ::ArrayResize(m_wnd,new_size);
   ::ArrayResize(m_windows,new_size);
   m_windows[windows_total]=::GetPointer(object);
//--- Добавим указатель в общий массив элементов
   int last_index=ResizeArray(m_wnd[windows_total].m_elements);
   m_wnd[windows_total].m_elements[last_index]=::GetPointer(object);
//--- Добавим в базу указатели кнопок окна
   AddWindowElements(windows_total,object);
//--- Установим идентификатор и запомним id последнего элемента
   m_windows[windows_total].Id(m_counter_element_id);
   m_windows[windows_total].LastId(m_counter_element_id);
//--- Увеличим счётчик идентификаторов элементов
   m_counter_element_id++;
  }
 
Чтоб запустить два окна и сделать их одновременно активными нужно править библиотеку. Не простая и обьемная задача. Если очень нужно, пишите во фриланс
 
Самый лучший. Поздравляем.
 

Привет всем, как дела? Есть ли ограничение на CreateSimpleButton? У меня не получается разместить в окне более 6 простых кнопок. Я использую код графических интерфейсов x (mql4). У меня произошел uninit по причине 8. Я очень благодарен Анатолию Кажарскому Best, RDT


Я выяснил, что ошибка была в самом metatrader 4, я компилировал советника на одном и том же графике несколько раз. Заметил, что если внести изменения, закрыть график и открыть новый, а потом поставить на него советника, то изменения применяются корректно. Анатолий, большое спасибо за исключительную и полную работу. С уважением, RDT

Anatoli Kazharski
Anatoli Kazharski
  • 2019.02.17
  • www.mql5.com
Perfil do Trader