Bibliotecas: EasyAndFastGUI - biblioteca para criar interfaces gráficas do usuário - página 13

 

Boa noite.

Mouse.mqh.

//+------------------------------------------------------------------+
//| Verificar se o estado do botão esquerdo do mouse foi alterado
//+------------------------------------------------------------------+
bool CMouse::CheckChangeLeftButtonState(const string mouse_state)
  {
   bool left_button_state=(bool)int(mouse_state);
//--- Envie uma mensagem sobre a alteração do estado do botão esquerdo do mouse
   if(m_left_button_state!=left_button_state)
      ::EventChartCustom(m_chart.ChartId(),ON_CHANGE_MOUSE_LEFT_BUTTON,0,0.0,"");
//--- Retorna o estado atual do botão esquerdo do mouse
   return(left_button_state);
  }
//+------------------------------------------------------------------+

Passamos sparam aqui e, pelo que entendi, qualquer valor diferente de zero é tratado como um botão do mouse pressionado. Mas os valores diferentes de zero são fornecidos por todos os botões do mouse, além de Shift e Control, pelo menos.

É assim que se pretende fazer?

 
Oleksii Chepurnyi:

Boa noite.

Mouse.mqh

Passamos sparam aqui e, pelo que entendi, qualquer valor diferente de zero é tratado como um botão do mouse pressionado. Mas os valores diferentes de zero são fornecidos por todos os botões do mouse, além de Shift e Control, pelo menos.

É essa a intenção?

Não, foi apenas uma solução temporária para minhas tarefas personalizadas.

Parece que ela não está sendo usada em nenhum lugar da biblioteca no momento. Pode ser aperfeiçoada, se necessário.

 
Anatoli Kazharski:

Não, foi apenas uma solução temporária para minhas tarefas personalizadas.

Ela não parece estar sendo usada em nenhum lugar da biblioteca no momento. Pode ser refinado, se necessário.

Ele é usado com muita frequência :) Por exemplo, arrastar janelas, deslizar rapidamente o SpinEdit. Em todos os lugares em que o estado do LKM é verificado.

Eu o fiz assim

//+------------------------------------------------------------------+
//| Verificar se o estado do botão esquerdo do mouse foi alterado
//+------------------------------------------------------------------+
bool CMouse::CheckChangeLeftButtonState(const string mouse_state)
  {
   bool left_button_state=((int)mouse_state==1);
//--- Envie uma mensagem sobre a alteração do estado do botão esquerdo do mouse
   if(m_left_button_state!=left_button_state)
      ::EventChartCustom(m_chart.ChartId(),ON_CHANGE_MOUSE_LEFT_BUTTON,0,0.0,"");
//--- Retorna o estado atual do botão esquerdo do mouse
   return(left_button_state);
  }
//+------------------------------------------------------------------+
 
Anatoli Kazharski:

Não, foi apenas uma solução temporária para minhas tarefas personalizadas.

Ela não parece estar sendo usada em nenhum lugar da biblioteca no momento. Pode ser aperfeiçoada, se necessário.

Na versão mais recente - https://www.mql5.com/pt/code/19703

não é possível adicionar

 //CCanvasTable m_canvas_table;

O problema parece ser que estou olhando para exemplos de versões antigas!


class CProgram : public CWndEvents
  {
protected:
   //--- Contadores de tempo
   CTimeCounter      m_counter1; // para atualizar o processo de execução
   CTimeCounter      m_counter2; // para atualizar itens na barra de status
   //--- Janela principal
   CWindow           m_window;
   //--- Imagem
   CPicture          m_picture1;
   
   //--- Menu principal e seus menus de contexto
   CMenuBar          m_menubar;
   CContextMenu      m_mb_contextmenu1;

   //--- Tabela de desenho
   //CCanvasTable m_canvas_table;
   
   //--- Cadeia de caracteres de status
   CStatusBar        m_status_bar;

 
 

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

Na versão mais recente - https://www.mql5.com/pt/code/19703

falha ao adicionar

O problema parece ser que estou olhando para exemplos de versões mais antigas!


Eu tenho a versão Build 10, https://www.mql5.com/pt/articles/3042 funciona lá!

Tive que fazer algo parecido com isso, o que não é bom.

MQL5\Include\EasyAndFastGUI_B10

MQL5\Include\EasyAndFastGUI_B16

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

Biblioteca maravilhosa!

Criei um indicador simples, mas útil, para o MICEX.

O indicador é composto por: ações, % de crescimento para o dia e, em seguida, os dados padrão, volumes para comprar desde o início do dia BuyVol, volumes para vender SellVol, diferença VolDelta em volumes desde o início do dia, e terminarei com a % da diferença atual em volumes.

delta verde - é desejável manter a compra ou tentar procurar um ponto de entrada de compra, etc.



 
Yuriy Zaytsev:

Tenho a versão Build 10, https://www.mql5.com/pt/articles/3042 funciona lá!

Eu tive que fazer algo assim, o que não é bom.

MQL5\Include\EasyAndFastGUI_B10

MQL5\Include\EasyAndFastGUI_B16.

Obrigado pela mensagem. Não tenho tempo no momento. Verei um pouco mais tarde qual pode ser o problema.

 
Yuriy Zaytsev:

Tenho a versão Build 10, https://www.mql5.com/pt/articles/3042 funciona lá!

Eu tive que fazer algo assim, o que não é bom.

MQL5\Include\EasyAndFastGUI_B10

MQL5/Include/EasyAndFastGUI_B16

Uma vez que a biblioteca foi bastante reformulada, não me lembro do número da compilação. É provável que não haja CCanvasTable nas novas compilações :)

Nas conclusões dos artigos, há um esquema geral da biblioteca na época do lançamento, que você pode comparar.

 
Olá

Não é possível colorir uma coluna usando a função de tabela?


Se você adicionar dois indicadores.

A função close window fecha duas janelas.
A função collect window coleta duas janelas.
Muito obrigado por sua ajuda.

Sou do Brasil e usei um tradutor para escrever. Peço desculpas por qualquer erro neste idioma.


 
Olá amigos
Fiz as seguintes alterações

No arquivo Table.mqh

      string            m_header_text;    // Texto do cabeçalho da coluna
      color             m_header_color;   // Cor do texto do cabeçalho da coluna //André
      CTCell            m_rows[];         // Matriz das linhas da tabela

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

----------------------------------------------------------------------------------------------------------
   void              SetHeaderText(const uint column_index,const string value);
   //--- Definindo a cor do texto para o cabeçalho especificado //André
   void              HeadersTextColor(const color &array[]);
--------------------------------------------------------------------------------------------------------------------
//André 
//+------------------------------------------------------------------+
//| Preenche a matriz de modos de alinhamento de texto
//+------------------------------------------------------------------+
void CTable::HeadersTextColor(const color &array[])
  {
   int total=0;
//--- Sair, se uma matriz de tamanho zero foi passada
   if((total=CheckArraySize(array))==WRONG_VALUE)
      return;
//--- Armazene o valor na matriz
   for(int c=0; c<total; c++)
      m_columns[c].m_header_color=array[c];
  }
------------------------------------------------------------------------------------------------------------------------
      //André
      //--- Cor do texto
      uint clr=::ColorToARGB(m_columns[c].m_header_color);

Em Window.mqh

//--- Manipulação do evento de clicar nos botões do formulário
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_BUTTON)
     {
      //André
      if(StringFind(sparam, CElementBase::ProgramName(), 0)<0)
         return;
      //--- Feche a janela
-------------------------------------------------------------------------------
   int subwin=(CElementBase::ProgramType()==PROGRAM_INDICATOR)? ::ChartWindowFind() : m_subwin;
//--- Enviar uma mensagem sobre isso
   //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);
//--- Enviar uma mensagem sobre a alteração na interface gráfica
   ::EventChartCustom(m_chart_id,ON_CHANGE_GUI,CElementBase::Id(),0.0,"");
  }
---------------------------------------------------------------------------------------
   int subwin=(CElementBase::ProgramType()==PROGRAM_INDICATOR)? ::ChartWindowFind() : m_subwin;
//--- Enviar uma mensagem sobre isso
   //André
   //::EventChartCustom(m_chart_id,ON_WINDOW_EXPAND,CElementBase::Id(),subwin,"");
   ::EventChartCustom(m_chart_id,ON_WINDOW_EXPAND,CElementBase::Id(),subwin,PROGRAM_NAME);
//--- Enviar uma mensagem sobre a alteração na interface gráfica
   ::EventChartCustom(m_chart_id,ON_CHANGE_GUI,CElementBase::Id(),0.0,"");

No arquivo WndEvents.mqh.

      return(false);
//--- Se o identificador da janela e o número da subjanela coincidirem
   //André
   if(m_sparam!=m_windows[0].ProgramName()) 
      return(false);
   if(m_lparam==m_windows[0].Id() && (int)m_dparam==m_subwin)


Comentei as linhas com meu nome para facilitar a localização

Em anexo estão os arquivos com o código completo modificado.

Espero que tenha ajudado

Arquivos anexados:
WndEvents.mqh  144 kb
Window.mqh  129 kb
Table.mqh  304 kb