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

 

Добрый вечер.

Mouse.mqh

//+------------------------------------------------------------------+
//| Проверка изменения состояния левой кнопки мыши                   |
//+------------------------------------------------------------------+
bool CMouse::CheckChangeLeftButtonState(const string mouse_state)
  {
   bool left_button_state=(bool)int(mouse_state);
//--- Отправим сообщение об изменении состояния левой кнопки мыши
   if(m_left_button_state!=left_button_state)
      ::EventChartCustom(m_chart.ChartId(),ON_CHANGE_MOUSE_LEFT_BUTTON,0,0.0,"");
//--- Вернуть текущее состояние левой кнопки мыши
   return(left_button_state);
  }
//+------------------------------------------------------------------+

Мы сюда передаем sparam и, на сколько я понимаю, любое ненулевое значение воспринимаем как нажата ЛКМ. Но ненулевые значения дают все кнопки мыши, плюс Shift и Control как минимум.

Это так и задумано?

 
Oleksii Chepurnyi:

Добрый вечер.

Mouse.mqh

Мы сюда передаем sparam и, на сколько я понимаю, любое ненулевое значение воспринимаем как нажата ЛКМ. Но ненулевые значения дают все кнопки мыши, плюс Shift и Control как минимум.

Это так и задумано?

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

В библиотеке сейчас вроде бы даже вообще нигде не используется. Можно доработать при необходимости.

 
Anatoli Kazharski:

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

В библиотеке сейчас вроде бы даже вообще нигде не используется. Можно доработать при необходимости.

Очень часто используется :) Например, перетаскивание окна, быстрое пролистывание SpinEdit. Везде, где проверяется состояние ЛКМ.

Сделал так

//+------------------------------------------------------------------+
//| Проверка изменения состояния левой кнопки мыши                   |
//+------------------------------------------------------------------+
bool CMouse::CheckChangeLeftButtonState(const string mouse_state)
  {
   bool left_button_state=((int)mouse_state==1);
//--- Отправим сообщение об изменении состояния левой кнопки мыши
   if(m_left_button_state!=left_button_state)
      ::EventChartCustom(m_chart.ChartId(),ON_CHANGE_MOUSE_LEFT_BUTTON,0,0.0,"");
//--- Вернуть текущее состояние левой кнопки мыши
   return(left_button_state);
  }
//+------------------------------------------------------------------+
 
Anatoli Kazharski:

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

В библиотеке сейчас вроде бы даже вообще нигде не используется. Можно доработать при необходимости.

В последнем релизе -  https://www.mql5.com/ru/code/19703

не удается добавить 

 //CCanvasTable      m_canvas_table;

Проблема видимо в том, что примеры смотрю в старых версиях!


class CProgram : public CWndEvents
  {
protected:
   //--- Временные счётчики
   CTimeCounter      m_counter1; // для обновления процесса выполнения
   CTimeCounter      m_counter2; // для обновления пунктов в статусной строке
   //--- Главное окно
   CWindow           m_window;
   //--- Картинка
   CPicture          m_picture1;
   
   //--- Главное меню и его контекстные меню
   CMenuBar          m_menubar;
   CContextMenu      m_mb_contextmenu1;

   //--- Нарисованная таблица
   //CCanvasTable      m_canvas_table;
   
   //--- Статусная строка
   CStatusBar        m_status_bar;

 
 

 
EasyAndFastGUI - библиотека для создания графических интерфейсов
EasyAndFastGUI - библиотека для создания графических интерфейсов
  • www.mql5.com
Библиотека EasyAndFastGUI дает возможность создавать графические интерфейсы для своих MQL-программ.
 
Yuriy Zaytsev:

В последнем релизе -  https://www.mql5.com/ru/code/19703

не удается добавить 

Проблема видимо в том, что примеры смотрю в старых версиях!


Взял версию Build 10 ,  https://www.mql5.com/ru/articles/3042    там работает!

Пришлось делать нечто вроде , что не есть гуд

MQL5\Include\EasyAndFastGUI_B10

MQL5\Include\EasyAndFastGUI_B16

Графические интерфейсы X: Обновления для нарисованной таблицы и оптимизация кода (build 10)
Графические интерфейсы X: Обновления для нарисованной таблицы и оптимизация кода (build 10)
  • www.mql5.com
О том, для чего предназначена эта библиотека, более подробно можно прочитать в самой первой статье: Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1). В конце статей каждой части представлен список глав со ссылками. Там же есть возможность загрузить к себе на компьютер полную версию библиотеки на текущей стадии разработки...
 

Чудная библиотека!

Забацал простой но полезный индикатор для ММВБ.

Акция , рост % за день ,   далее штатные данные ,  объемы на покупку с начала дня BuyVol , объемы на продажу SellVol  , VolDeltа  разница объемов с начала дня  , доделаю еще % текущей разницы по объемам

зеленая дельта - желательно удерживать бай,  либо пытаться искать точку входа в бай и т д.


 

 
Yuriy Zaytsev:

Взял версию Build 10 ,  https://www.mql5.com/ru/articles/3042    там работает!

Пришлось делать нечто вроде , что не есть гуд

MQL5\Include\EasyAndFastGUI_B10

MQL5\Include\EasyAndFastGUI_B16

Спасибо за сообщение. У меня пока совсем нет времени. Я посмотрю чуть позже, в чём там может быть проблема.

 
Yuriy Zaytsev:

Взял версию Build 10 ,  https://www.mql5.com/ru/articles/3042    там работает!

Пришлось делать нечто вроде , что не есть гуд

MQL5\Include\EasyAndFastGUI_B10

MQL5\Include\EasyAndFastGUI_B16

Когда-то библиотека была очень сильно переделана, номер билда не помню. Скорей всего в новых билдах просто нету CCanvasTable :)

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

 
привет

Невозможно ли раскрасить столбец, используя функцию таблицы?


Если вы добавите два индикатора.

Функция закрытия окна закрывает два окна.
Функция сбора окна собирает два окна.
Большое спасибо за помощь.

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


 
Привет друзья
Я внес следующие изменения

В файле Table.mqh

      string            m_header_text;    // Column header text
      color             m_header_color;   // Column header text color //André
      CTCell            m_rows[];         // Array of the table rows

----------------------------------------------------------------------------------------------------------------------
   void              HeadersColorPressed(const color clr)    { m_headers_color_pressed=clr;      }
   //void              HeadersTextColor(const color clr)       { m_headers_text_color=clr;         } //André

----------------------------------------------------------------------------------------------------------
   void              SetHeaderText(const uint column_index,const string value);
   //--- Setting the color text to the specified header //André
   void              HeadersTextColor(const color &array[]);
--------------------------------------------------------------------------------------------------------------------
//André  
//+------------------------------------------------------------------+
//| Fills the array of text alignment modes                          |
//+------------------------------------------------------------------+
void CTable::HeadersTextColor(const color &array[])
  {
   int total=0;
//--- Leave, if a zero-sized array was passed
   if((total=CheckArraySize(array))==WRONG_VALUE)
      return;
//--- Store the value into the array
   for(int c=0; c<total; c++)
      m_columns[c].m_header_color=array[c];
  }
------------------------------------------------------------------------------------------------------------------------
      //André
      //--- Text color
      uint clr=::ColorToARGB(m_columns[c].m_header_color);

В файле Window.mqh

//--- Handling the even of clicking the form buttons
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_BUTTON)
     {
      //André
      if(StringFind(sparam, CElementBase::ProgramName(), 0)<0)
         return;
      //--- Close the window
-------------------------------------------------------------------------------
   int subwin=(CElementBase::ProgramType()==PROGRAM_INDICATOR)? ::ChartWindowFind() : m_subwin;
//--- Send a message about it
   //André
   //Print(__FUNCTION__, " ", subwin, " ", PROGRAM_NAME);
   //::EventChartCustom(m_chart_id,ON_WINDOW_COLLAPSE,CElementBase::Id(),subwin,"");
   ::EventChartCustom(m_chart_id,ON_WINDOW_COLLAPSE,CElementBase::Id(),subwin, PROGRAM_NAME);
//--- Send a message about the change in the graphical interface
   ::EventChartCustom(m_chart_id,ON_CHANGE_GUI,CElementBase::Id(),0.0,"");
  }
---------------------------------------------------------------------------------------
   int subwin=(CElementBase::ProgramType()==PROGRAM_INDICATOR)? ::ChartWindowFind() : m_subwin;
//--- Send a message about it
   //André
   //::EventChartCustom(m_chart_id,ON_WINDOW_EXPAND,CElementBase::Id(),subwin,"");
   ::EventChartCustom(m_chart_id,ON_WINDOW_EXPAND,CElementBase::Id(),subwin,PROGRAM_NAME);
//--- Send a message about the change in the graphical interface
   ::EventChartCustom(m_chart_id,ON_CHANGE_GUI,CElementBase::Id(),0.0,"");

В файле WndEvents.mqh

      return(false);
//--- If the window identifier and the sub-window number match
   //André
   if(m_sparam!=m_windows[0].ProgramName()) 
      return(false);
   if(m_lparam==m_windows[0].Id() && (int)m_dparam==m_subwin)


Я прокомментировал строки с моим именем, чтобы облегчить локализацию

Прикреплены файлы с измененным полным кодом.

Надеюсь, вы помогли

Файлы:
WndEvents.mqh  144 kb
Window.mqh  129 kb
Table.mqh  304 kb