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

 

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

Мне удалось уменьшить количество варнингов с 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 - размер окна меняется по мере добавление или уменьшения количества добавленных в него элементов.

 
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++;
  }
 
Чтоб запустить два окна и сделать их одновременно активными нужно править библиотеку. Не простая и обьемная задача. Если очень нужно, пишите во фриланс
 

Hi All,

I tried to use that library and add an Histogram with several series like the one from the amazing HighChart JS library ...




I first tried with the CGraph component, but it apear we can not add several series in Histogram mode, or I did not managed to.

Then I founded the one from the standard MT5 library in Scripts \ Examples \ Canvas \ Charts \ HistogramChartSample.mq5



I managed to customize it a little bit ...


and then I tried to create CHistogram based on CElement. So I create a CHistogram compoenent in Controls folder. I reference that component in WndContainer.mqh and create a sample expert in EasyAndFastGUI \ Experts \ och_test_histogram.mq 5.

But I do not managed to include in CWindow component.

This will allow to add on CWindow histogram and Pie ...

Any help will be appreciate.

Bst regards,

och

Interactive JavaScript charts for your webpage | Highcharts
  • www.highcharts.com
Highcharts - Interactive JavaScript charts for your web pages.
Файлы:
 

Hi All,


I fixed it, briefly, but I still have a memory leak when I remove the expert.



I don't know how to track this memory leak ...


Bst regards,

och

Файлы:
EasyAndFastGUI.zip  1022 kb
 

Добрый день, Анатолий. Хочу поздравить вас с отличной работой. И воспользуйтесь возможностью, чтобы спросить, можете ли вы уместить гистограмму в последнем столбце справа в таблице из трех столбцов. В первом столбце будет прайс-лист, во втором - объем торгов на каждом уровне цен, а в третьем - гистограмма. Я перевел с португальского на русский. Надеюсь, это было понятно.