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

 
Está planejado um designer de formulário visual?
 
Anatoli Kazharski

Olá... existe uma maneira de abrir a janela de diálogo usando essa versão da biblioteca. A janela de diálogo está funcionando apenas com o seletor de cores e, se eu tentar criar uma apenas vazia para inserir alguma tabela ou botões extras, ela não funcionará, apenas ficará ligada e não poderá ser movida.

Por favor, ajude... essa biblioteca é absolutamente linda, e muito obrigado por compartilhá-la, mas esse detalhe está reduzindo muito a funcionalidade

Se usarmos uma única janela, tudo estará bem, apenas a janela de diálogo não está funcionando corretamente, ou isso foi planejado desde o início??:)


PS

Caso eu esteja errado, há algum exemplo de como abrir uma janela de diálogo e ter um único botão dentro dela ou algo mais (não apenas um seletor de cores)?

Estou usando o MT5

 
Farrukh Aleem:

Na versão MT4, o SimpleButton não tem a função de alterar o texto/capítulo do botão.


SimpleButton.mqh

Adicione a segunda linha para obter essa funcionalidade. Espero que este post ajude alguém que precise.

A biblioteca deste artigo é apenas para o MT5 e, se alguém quiser alterar o texto, pode usar a biblioteca para o MT5:

lableClassDeclarationName.LabelText(textValue);
lableClassDeclarationName.Update(true);
 
Stanislav Korotky:
Há algum plano para um designer de formulário visual?

Pensamos nisso anteriormente, mas infelizmente ainda não há tempo para isso.

Uma nova versão da biblioteca será lançada em breve. Será muito mais fácil e rápido criar a GUI. Depois disso, poderemos tentar criar um editor visual.

 
Marcin Rutkowski:

Olá... existe uma maneira de abrir a janela de diálogo usando essa versão da biblioteca. A janela de diálogo está funcionando apenas com o seletor de cores e, se eu tentar criar uma apenas vazia para inserir alguma tabela ou botões extras, ela não estará funcionando, apenas estará ligada e não será movida.

Por favor, ajude... essa biblioteca é absolutamente linda, e muito obrigado por compartilhá-la, mas esse detalhe está reduzindo muito a funcionalidade

Se usarmos uma única janela, tudo estará bem, apenas a janela de diálogo não está funcionando corretamente, ou isso foi planejado desde o início??:)


PS

Caso eu esteja errado, há algum exemplo de como abrir uma janela de diálogo e ter um único botão dentro dela ou algo mais (não apenas um seletor de cores)?

Estou usando o MT5

Olá, Marcin, escreva sua função para criar objetos (inclusive janelas de diálogo). Por exemplo:

Primeiro, declare as janelas de diálogo e outros controles (botões, caixas de texto, caixas de seleção e outros) em Program.mqh:

class CProgram : public CWndEvents
  {
protected:
  
   
   CWindow           m_window;//janela principal
   CWindow           s_window;//subjanela de diálogo
  
   CButton           m_ibut1;
   CButton           m_ibut2;
   CTextBox          t_box1;
   CCheckBox         m_checkb1;
....

No MainWindow.mqh:

   //--função da janela principal:
 bool CProgram::CreateWindow(const string caption_text)
  {
//--- Adicione o ponteiro da janela à matriz de janelas
   CWndContainer::AddWindow(m_window);
//--- Coordenadas
   int x=(m_window.X()>0) ? m_window.X() : 20;
   int y=(m_window.Y()>0) ? m_window.Y() : 30;
//--- Propriedades
   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);
//--- Definir as dicas de ferramentas
   m_window.GetCloseButtonPointer().Tooltip("Close");
   m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  // m_window.GetTooltipButtonPointer().Tooltip("Tooltips");
//--- Criando um formulário
   if(!m_window.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }
 //----for dialog(subwindow): 
bool CProgram::CreateSubWindow(CWindow &win,const int xSize,const int ySize,const string caption_text)
  {
//--- Adicione o ponteiro da janela à matriz de janelas
   CWndContainer::AddWindow(win);
//--- Coordenadas
   int x=(win.X()>0) ? win.X() : 150;
   int y=(win.Y()>0) ? win.Y() : 70;
//--- Propriedades
   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");
//--- Definir as dicas de ferramentas
   win.GetCloseButtonPointer().Tooltip("Close");
   win.GetCollapseButtonPointer().Tooltip("Collapse/Expand");
  // m_window.GetTooltipButtonPointer().Tooltip("Tooltips");
//--- Criando um formulário
   if(!win.CreateWindow(m_chart_id,m_subwin,caption_text,x,y))
      return(false);
//---
   return(true);
  }  
Para outros controles (botões, caixas de texto...), use o ponteiro principal (janela ou guia) e o índice dele (no meu caso, "windex") desde o início:
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);
 
//--- Propriedades
   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);
//--- Anexar à guia
  // tab.AddToElementsArray(tindex,t_box);
//--- Criar um controle
   if(!t_box.CreateTextBox(x_gap,y_gap))
      return(false);
//--- Adicione o objeto à matriz comum de grupos de objetos
   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)
  {
//--- Armazene o ponteiro para o controle principal
   i_but.MainPointer(win);
//--- Propriedades
   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);
//--- Anexar à guia
  // tab.AddToElementsArray(tindex,i_but);

//--- Criar um controle
   if(!i_but.CreateButton(text,x_gap,y_gap))
      return(false);
//--- Adicione o ponteiro do controle à base
   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)
  {
//--- Armazene o ponteiro para o controle principal
   i_but.MainPointer(tab);
//--- Propriedades
   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);
//--- Anexar à guia
   tab.AddToElementsArray(tindex,i_but);

//--- Criar um controle
   if(!i_but.CreateButton(text,x_gap,y_gap))
      return(false);
//--- Adicione o ponteiro do controle à base
   CWndContainer::AddToElementsArray(0,i_but);
   return(true);
  }
 //----caixas de seleção----------
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)
  {
//--- Armazene o ponteiro para o controle principal
   check.MainPointer(win);
//--- Definir propriedades antes da criação
   check.XSize(Xsize);
   check.YSize(Ysize);
   check.IsPressed(false);


//--- Criar um controle
   if(!check.CreateCheckBox(text,x_gap,y_gap))
      return(false);
//--- Adicione o objeto à matriz comum de grupos de objetos
    CWndContainer::AddToElementsArray(windex,check);
   return(true);
  }      

Agora, de volta ao Program.mqh: Crie os controles

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);
} 

Como você pode ver, usei guias no meu painel principal, então escrevi outra função para o botão. Depois, na função 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();
         }
       }
   ....
....
  }

Compile e carregue o EA. Meu EA que usa a biblioteca EasyAndFastGUI tem a seguinte aparência:

 

Boa tarde, compilei a compilação 15 da biblioteca no mt4, criei um painel com tabelas, mas as tabelas piscam periodicamente, no mt5 também notei isso. Se eu não passar um parâmetro para o método, a cintilação desaparece, mas os dados na tabela não mudam. código de teste anexado no arquivo.

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

      //--- Obter os símbolos das posições abertas
      string symbols_name[];
      int symbols_total=GetPositionsSymbols(symbols_name);
      //--- Atualizar valores na tabela
      SetValuesToPositionsTable(symbols_name);
      //--- Classifique se isso já foi feito pelo usuário antes da atualização
      //m_table_positions.SortData((uint)m_table_positions.IsSortedColumnIndex(),m_table_positions.IsSortDirection());
      //--- Atualizar a tabela
      UpdatePositionsTable(true);
     }
Arquivos anexados:
 
zlory73:

Olá, Marcin, escreva sua função para criar objetos (inclusive janelas de diálogo). Por exemplo:

Primeiro, declare as janelas de diálogo e outros controles (botões, caixas de texto, caixas de seleção e outros) no arquivo Program.mqh:

No arquivo MainWindow.mqh:

wow ...obrigado pela resposta ...só para confirmar de qual artigo você baixou a biblioteca ...meu progresso está um passo à frente, mas todos os objetos vinculados à caixa de diálogo não podem ser arrastados e não desaparecem corretamente .Se puder me enviar também o link do artigo ou apenas confirmar se o link abaixo está correto :) ... de onde você baixou a biblioteca

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


Continuarei tentando fazer com que ela funcione :) não posso ver nenhum pequeno erro no meu código :) ... obrigado novamente

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.
 

Resolvi o problema da cintilação da tabela, ou melhor, o problema desapareceu ao gravar dados em uma célula com o parâmetro true

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

e chamando o método de atualização da tabela sem o parâmetro

m_table_positions.Update();
 
Marcin Rutkowski:

wow ..thank You for answer ..just to confirm from which article did You download the library ...my progress is 1 step forward, but all the object linked with dialog box are not draggable and not disappearing properly .Se puder me enviar também o link do artigo ou apenas confirmar se o link abaixo está correto :) ... de onde você baixou a biblioteca

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


Vou continuar tentando fazer com que funcione :) não posso ver nenhum pequeno erro no meu código :) ... obrigado novamente

Olá, Marcin, fiz o download do EasyAndFastGUI Build 16 em https://www.mql5.com/pt/articles/3527 e substituí as atualizações: Table.mqh em MQL5\Include\EasyAndFastGUI\Controls\ e Keys.mqh

em MQL5\Include\EasyAndFastGUI\ do artigo: 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...
 

Recompilado a biblioteca, ele diz que a classe não foi encontrada

A classe 'CWindow' não está definida Element.mqh