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

 
Планируется ли визуальный дизайнер форм?
 
Anatoli Kazharski

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

Пожалуйста, помогите. Это очень красивая библиотека, и большое спасибо за то, что поделились, но эта деталь сильно снижает функциональность.

Если мы используем одно окно, то все в порядке, только диалоговое окно работает неправильно, или это было запланировано с самого начала?)


PS

Если я ошибаюсь, есть ли пример, как открыть диалоговое окно и иметь одну кнопку внутри или что-то еще (только не выбор цвета)?

Я использую MT5

 
Farrukh Aleem:

В версии MT4 SimpleButton отсутствует функция изменения текста/надписи кнопки.


SimpleButton.mqh

Добавьте вторую строку, чтобы получить эту функциональность. Разместил здесь, надеюсь поможет кому-то, кто нуждается.

Библиотека из этой статьи предназначена только для MT5, и если кто-то захочет изменить текст:

lableClassDeclarationName.LabelText(textValue);
lableClassDeclarationName.Update(true);
 
Stanislav Korotky:
Планируется ли визуальный дизайнер форм?

Ранее думал об этом, но к сожалению пока нет на это времени.

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

 
Marcin Rutkowski:

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

Пожалуйста, помогите. Это очень красивая библиотека, и большое спасибо за то, что поделились, но эта деталь сильно снижает функциональность.

Если мы используем одно окно, то все в порядке, только диалоговое окно работает неправильно, или это было запланировано с самого начала?)


PS

На случай, если я ошибаюсь, есть ли пример, как открыть диалоговое окно и иметь внутри одну кнопку или что-то другое (только не color picker) ?

Я использую MT5

Привет, Марчин, напишите свою функцию для создания объектов (включая диалоговые окна). Например:

Сначала объявите диалоговые окна и другие элементы управления (кнопки, текстбоксы, чекбоксы и т.д.) в Program.mqh:

class CProgram : public CWndEvents
  {
protected:
  
   
   CWindow           m_window;// главное окно
   CWindow           s_window;//диалоговое подокно
  
   CButton           m_ibut1;
   CButton           m_ibut2;
   CTextBox          t_box1;
   CCheckBox         m_checkb1;
....

В MainWindow.mqh:

   //-- функция главного окна:
 bool CProgram::CreateWindow(const string caption_text)
  {
//--- Добавьте указатель окна в массив окон
   CWndContainer::AddWindow(m_window);
//--- Координаты
   int x=(m_window.X()>0) ? m_window.X() : 20;
   int y=(m_window.Y()>0) ? m_window.Y() : 30;
//--- Свойства
   m_window.XSize(253);
   m_window.YSize(350);
   m_window.IsMovable(true);
   m_window.Alpha(200);
   m_window.IconXGap(3);
   m_window.IconYGap(2);
   m_window.WindowType(W_MAIN);
   m_window.CloseButtonIsUsed(true);
   m_window.CollapseButtonIsUsed(true);
   m_window.TooltipsButtonIsUsed(false);
//--- Установите всплывающие подсказки
   m_window.GetCloseButtonPointer().Tooltip("Close");
   m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  // m_window.GetTooltipButtonPointer().Tooltip("Всплывающие подсказки");
//--- Создание формы
   if(!m_window.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }
 //---- для диалога (подокна): 
bool CProgram::CreateSubWindow(CWindow &win,const int xSize,const int ySize,const string caption_text)
  {
//--- Добавьте указатель окна в массив окон
   CWndContainer::AddWindow(win);
//--- Координаты
   int x=(win.X()>0) ? win.X() : 150;
   int y=(win.Y()>0) ? win.Y() : 70;
//--- Свойства
   win.XSize(xSize);//350
   win.YSize(ySize);//170
   win.IsMovable(true);
   win.Alpha(200);
   win.IconXGap(3);
   win.IconYGap(2);
   win.WindowType(W_DIALOG);
   win.CloseButtonIsUsed(true);
   win.CollapseButtonIsUsed(true);
   win.TooltipsButtonIsUsed(false);
 
 // m_window.IconFile("\\Images\\EasyAndFastGUI\\\Icons\\\bmp16\\\advisor.bmp");
//--- Установите всплывающие подсказки
   win.GetCloseButtonPointer().Tooltip("Close");
   win.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  // m_window.GetTooltipButtonPointer().Tooltip("Всплывающие подсказки");
//--- Создание формы
   if(!win.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }  
Для других элементов управления (кнопок, текстбоксов...) используйте основной указатель (окно или вкладку) и его индекс ("windex" в моем случае) с самого начала:
bool CProgram::CreateTextBox(CTextBox &t_box,CWindow &win,const int windex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,
                                          string text,const uint line_index,const int fontSize,const bool mlinemode)
  {
       t_box.MainPointer(win);
 
//--- Свойства
   t_box.XSize(Xsize);
   t_box.YSize(Ysize);
   t_box.FontSize(fontSize);
   t_box.Font("Calibri"); // Consolas|Calibri|Tahoma
   t_box.TextYOffset(2);
   t_box.TextXOffset(2);
   t_box.BackColor(clrWhite);
   t_box.BorderColor(C'150,170,180');
   t_box.LabelColor(clrBlack);
   t_box.WordWrapMode(true);
   t_box.ReadOnlyMode(false);
   t_box.IsCenterText(true);
   t_box.MultiLineMode(mlinemode);
   t_box.AutoYResizeBottomOffset(3);
   t_box.AutoXResizeRightOffset(3);
   t_box.AddText(line_index,text);
   t_box.IsVisible(true);
//--- Прикрепить к вкладке
  // tab.AddToElementsArray(tindex,t_box);
//--- Создайте элемент управления
   if(!t_box.CreateTextBox(x_gap,y_gap))
      return(false);
//--- Добавьте объект в общий массив групп объектов
   CWndContainer::AddToElementsArray(windex,t_box);
  return(true);
  } 
//----------win button--------
bool CProgram::CreateIconButton(CButton &i_but,CWindow &win,const int windex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,
                                              string text, bool twostate,color bckclr)
  {
//--- Сохраните указатель на главный элемент управления
   i_but.MainPointer(win);
//--- Свойства
   i_but.XSize(Xsize);
   i_but.YSize(Ysize);
   i_but.IconXGap(3);
   i_but.IconYGap(3);
   i_but.TwoState(twostate);
   i_but.BackColor(bckclr);
   i_but.BorderColor(clrBlack);
   i_but.IsCenterText(true);
   i_but.IsPressed(false);
   if(i_but.TwoState()==true)
     {i_but.BackColorPressed(bckclr);
     i_but.BackColor(clrSilver);}
   else
     i_but.BackColor(bckclr);
//--- Прикрепить к вкладке
  // tab.AddToElementsArray(tindex,i_but);

//--- Создайте элемент управления
   if(!i_but.CreateButton(text,x_gap,y_gap))
      return(false);
//--- Добавьте указатель на элемент управления в базу
   CWndContainer::AddToElementsArray(windex,i_but);
   return(true);
  } 
//-----------tab button--------------
bool CProgram::CreatetabIconButton(CButton &i_but,CTabs &tab,const int tindex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,
                                              string text, bool twostate,color bckclr)
  {
//--- Сохраните указатель на главный элемент управления
   i_but.MainPointer(tab);
//--- Свойства
   i_but.XSize(Xsize);
   i_but.YSize(Ysize);
   i_but.IconXGap(3);
   i_but.IconYGap(3);
   i_but.TwoState(twostate);
   i_but.BackColor(bckclr);
   i_but.BorderColor(clrBlack);
   i_but.IsCenterText(true);
   i_but.IsPressed(false);
   if(i_but.TwoState()==true)
     {i_but.BackColorPressed(bckclr);
     i_but.BackColor(clrSilver);}
   else
     i_but.BackColor(bckclr);
//--- Прикрепить к вкладке
   tab.AddToElementsArray(tindex,i_but);

//--- Создайте элемент управления
   if(!i_but.CreateButton(text,x_gap,y_gap))
      return(false);
//--- Добавьте указатель на элемент управления в базу
   CWndContainer::AddToElementsArray(0,i_but);
   return(true);
  }
 //---- флажки----------
bool CProgram::CreateCheckBox(CCheckBox &check,CWindow &win,const int windex,const int x_gap,const int y_gap,const int Xsize,const int Ysize,string text)
  {
//--- Сохраните указатель на главный элемент управления
   check.MainPointer(win);
//--- Установите свойства перед созданием
   check.XSize(Xsize);
   check.YSize(Ysize);
   check.IsPressed(false);


//--- Создайте элемент управления
   if(!check.CreateCheckBox(text,x_gap,y_gap))
      return(false);
//--- Добавьте объект в общий массив групп объектов
    CWndContainer::AddToElementsArray(windex,check);
   return(true);
  }      

Теперь вернемся к Program.mqh: создадим элементы управления

bool CProgram::CreateGUI()
  {

if(!CreateWindow("EA Panel"))
      return(false);
if(!CreateSubWindow(s_window,280,200,"SubWindow"))
  return(false);
if(!CreatetabIconButton(m_ibut1,m_tabs1,2,80,125,80,15,"Button 1",false,clrSilver))
        return(false);   
   if(!CreateIconButton(m_ibut2,s_window,3,70,150,60,20,"Button 2",false,clrSilver))
            return(false);       
   if(!CreateTextBox(t_box1,s_window,3,100,70,30,20," ",0,10,false))
      return(false);
   if(!CreateCheckBox(m_checkb1,s_window,3,20,70,70,20,"CheckBox1"))
      return(false); 
…...
….

CwndEvents::CompletedGUI();
return(true);
} 

Как вы можете видеть, я использовал вкладки на главной панели, поэтому я написал еще одну функцию для кнопки. Затем в функции OnEvent:

void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_BUTTON)
       {
       if(lparam==m_ibut1.Id())
         {
         s_window.OpenWindow();
         }
       }
   ....
....
  }

Скомпилируйте и загрузите советник. Мой советник, использующий библиотеку EasyAndFastGUI, выглядит следующим образом:

 

Добрый день, скомпилировал 15 билд библиотеки под мт4, создал панель с таблицами, но таблицы периодически мерцают, под Мт5 тоже такое заметил. Если не передаю в метод параметр, мерцание пропадает, но данные в таблице не меняются. тестовый код прикладываю в архиве.

   if(m_counter2.CheckTimeCounter())
     {
      SetValuesToTradeTable();
      UpdateTradeTable(true);

      //--- Получим символы открытых позиций
      string symbols_name[];
      int symbols_total=GetPositionsSymbols(symbols_name);
      //--- Обновить значения в таблице
      SetValuesToPositionsTable(symbols_name);
      //--- Отсортировать, если это уже было сделано пользователем до обновления
      //m_table_positions.SortData((uint)m_table_positions.IsSortedColumnIndex(),m_table_positions.IsSortDirection());
      //--- Обновить таблицу
      UpdatePositionsTable(true);
     }
Файлы:
 
zlory73:

Привет, Марчин, напишите свою функцию для создания объектов (включая диалоговые окна). Например:

Сначала объявите диалоговые окна и другие элементы управления (кнопки, текстбоксы, чекбоксы и т.д.) в Program.mqh:

В MainWindow.mqh:

...спасибо за ответ ...просто чтобы подтвердить, из какой статьи Вы скачали библиотеку ...мой прогресс на 1 шаг вперед, но все объекты, связанные с диалоговым окном, не перетаскиваются и не исчезают должным образом....Если бы Вы могли прислать мне также ссылку на статью или просто подтвердить, что ссылка ниже правильная :) ...откуда Вы скачали библиотеку

https://www.mql5.com/ru/code/19703


Я буду продолжать пытаться заставить его работать :) я не должен видеть какую-то маленькую ошибку в моем коде :) ...спасибо еще раз

EasyAndFastGUI library for creating graphical interfaces
EasyAndFastGUI library for creating graphical interfaces
  • www.mql5.com
The EasyAndFastGUI library allows creating graphical interfaces for custom MQL programs.
 

Все с мерцанием таблицы разобрался, точнее проблема исчезла при записи данных в ячейку с параметром true

m_table_positions.SetValue(0,r,symbols_name[r],0,true);

и вызова метода обновления таблицы без параметра

m_table_positions.Update();
 
Marcin Rutkowski:

Вау ... спасибо за ответ ... просто чтобы подтвердить, из какой статьи вы загрузили библиотеку ... мой прогресс на 1 шаг вперед, но все объекты, связанные с диалоговым окном не перетаскиваются и не исчезают должным образом ....Если бы Вы могли прислать мне также ссылку на статью или просто подтвердить, что ссылка ниже правильная :) ...откуда Вы скачали библиотеку

https://www.mql5.com/ru/code/19703


Я буду продолжать пытаться заставить его работать :) я не должен видеть какую-то маленькую ошибку в моем коде :) ...спасибо еще раз

Привет, Марчин, я скачал EasyAndFastGUI Build 16 с https://www.mql5.com/ru/articles/3527, затем заменил обновления: Table.mqh в MQL5\Include\EasyAndFastGUI\Controls\ и Keys.mqh

в MQL5\Include\EasyAndFastGUI\ из статьи: https: //www.mql5.com/en/articles/4715.

Graphical Interfaces XI: Integrating the Standard Graphics Library (build 16)
Graphical Interfaces XI: Integrating the Standard Graphics Library (build 16)
  • www.mql5.com
The first article Graphical Interfaces I: Preparation of the Library Structure (Chapter 1) explains in detail what this library is for. You will find a list of articles with links at the end of each chapter. There, you can also download a complete version of the library at the current stage of development. Files must be placed under the same...
 

Перекомпилировал библиотеку, выдает что класс не найден

 

class 'CWindow' is undefined Element.mqh