Painel Avançado estilo Windows

 

Olá Amigos,

depois de estudar o dia inteiro, ler e depurar vários exemplos, o máximo que consegui na construção do meu painel foi colocar botões.

Esta funcionando correto.

Este tema é muito complexo para quem está iniciando como eu.

Gostaria que alguém que possui conhecimento na construção destes painéis me orientasse.

Apenas gostaria que, além dos botões que já consegui, a visualização de texto e variáveis neste painel.

No aguardo e Obrigado.

#include <Controls\Dialog.mqh>
#include <Controls\Button.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\AccountInfo.mqh>

#define INDENT_LEFT                         (11)      // indent from left (with allowance for border width)
#define INDENT_TOP                          (11)      // indent from top (with allowance for border width)
#define CONTROLS_GAP_X                      (5)       // gap by X coordinate
#define BUTTON_WIDTH                        (100)     // size by X coordinate
#define BUTTON_HEIGHT                       (20)      // size by Y coordinate

class CAppWindowTwoButtons : public CAppDialog
     {protected:  CPositionInfo     m_position;                      // trade position object
                  CTrade            m_trade;                         // trading object
                  CAccountInfo      m_account;                       // account info wrapper
      private:    CButton           m_button1;                       // the button object
                  CButton           m_button2;                       // the button object
      public:     CAppWindowTwoButtons(void);
                 ~CAppWindowTwoButtons(void);
                  virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);
                  virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
      protected:  bool              CreateButton1(void);
                  bool              CreateButton2(void);
                  void              OnClickButton1(void);
                  void              OnClickButton2(void);};

EVENT_MAP_BEGIN(CAppWindowTwoButtons)
ON_EVENT(ON_CLICK,m_button1,OnClickButton1)
ON_EVENT(ON_CLICK,m_button2,OnClickButton2)
EVENT_MAP_END(CAppDialog)
CAppWindowTwoButtons::CAppWindowTwoButtons(void)  {}
CAppWindowTwoButtons::~CAppWindowTwoButtons(void) {}

bool CAppWindowTwoButtons::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
  {if (!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
       return(false);
   if (!CreateButton1())
       return(false);
   if (!CreateButton2())
       return(false);
   return(true);}

CAppWindowTwoButtons ExtDialog;

int OnInit()
  {if (!ExtDialog.Create(0,"AppWindowClass with Two Buttons",0,40,40,380,344))
      {return(INIT_FAILED);}
   ExtDialog.Run();
   return(INIT_SUCCEEDED);}

void OnDeinit(const int reason)
  {ExtDialog.Destroy(reason);}

void OnChartEvent(const int id,         // event ID  
                  const long& lparam,   // event parameter of the long type
                  const double& dparam, // event parameter of the double type
                  const string& sparam) // event parameter of the string type
  {ExtDialog.ChartEvent(id,lparam,dparam,sparam);}

bool CAppWindowTwoButtons::CreateButton1(void)
  {int x1=INDENT_LEFT;                                   // x1            = 11  pixels
   int y1=INDENT_TOP;                                    // y1            = 11  pixels
   int x2=x1+BUTTON_WIDTH;                               // x2 = 11 + 100 = 111 pixels
   int y2=y1+BUTTON_HEIGHT;                              // y2 = 11 + 20  = 32  pixels
   if (!m_button1.Create(0,"Button1",0,x1,y1,x2,y2))
      {return(false);}
   if (!m_button1.Text("Open BUY"))
      {return(false);}
   if (!Add(m_button1))
      {return(false);}
   return(true);}

bool CAppWindowTwoButtons::CreateButton2(void)
  {int x1=INDENT_LEFT+2*(BUTTON_WIDTH+CONTROLS_GAP_X);   // x1 = 11  + 2 * (100 + 5) = 221 pixels
   int y1=INDENT_TOP;                                    // y1                       = 11  pixels
   int x2=x1+BUTTON_WIDTH;                               // x2 = 221 + 100           = 321 pixels
   int y2=y1+BUTTON_HEIGHT;                              // y2 = 11  + 20            = 31  pixels
   if (!m_button2.Create(0,"Button2",0,x1,y1,x2,y2))
      {return(false);}
   if (!m_button2.Text("Close"))
      {return(false);}
   if (!Add(m_button2))
      {return(false);}
   return(true);}

void CAppWindowTwoButtons::OnClickButton1(void)
  {if (m_account.TradeMode()==ACCOUNT_TRADE_MODE_DEMO)
      {m_trade.Buy(1.0);}}

void CAppWindowTwoButtons::OnClickButton2(void)
  {if (m_account.TradeMode()==ACCOUNT_TRADE_MODE_DEMO)
      {for (int i=PositionsTotal()-1;i>=0;i--)
           {if (m_position.SelectByIndex(i))
               {if (m_position.Symbol()==Symbol())
                   {m_trade.PositionClose(m_position.Ticket());}}}}}


  

 
ArmandoJunior70:

Olá Amigos,

depois de estudar o dia inteiro, ler e depurar vários exemplos, o máximo que consegui na construção do meu painel foi colocar botões.

Esta funcionando correto.

Este tema é muito complexo para quem está iniciando como eu.

Gostaria que alguém que possui conhecimento na construção destes painéis me orientasse.

Apenas gostaria que, além dos botões que já consegui, a visualização de texto e variáveis neste painel.

No aguardo e Obrigado.


  

O melhor artigo para construir e entender painel de qualquer nivel de complexidade esta nesse artigo:  Como criar um painel gráfico de qualquer nível de complexidade - Artigos MQL5

Como criar um painel gráfico de qualquer nível de complexidade
Como criar um painel gráfico de qualquer nível de complexidade
  • www.mql5.com
O artigo apresenta uma explicação detalhada de como criar um painel com base na classe CAppDialog e como adicionar controles ao painel. Ele fornece a descrição da estrutura do painel e um esquema, que exibe a herança de objetos. Neste artigo, você também aprenderá como os eventos são tratados e como eles são entregues aos controles dependentes. Exemplos adicionais mostram como editar os parâmetros do painel, como o tamanho e a cor do plano de fundo.
 

Obrigado Robson.

este artigo descreve muito bem, mas somente a criação do painel e dos botões. Gostaria de aprender a construção de outros elementos principalmente texto e variáveis.

"Painéis de Controle e Caixas de Diálogos. Classe de demonstração da CButton"