Discussão do artigo "Como adicionar rapidamente paneis de controle a indicadores e conselheiros (EA)"

 

Novo artigo Como adicionar rapidamente paneis de controle a indicadores e conselheiros (EA) foi publicado:

Você deseja adicionar ao seu indicador ou conselheiro um painel gráfico para um controle fácil e rápido, mas não sabe como fazê-lo? Neste artigo, vou mostrar passo a passo como "atar" o painel de diálogo com os parâmetros de entrada do seu programa MQL4/MQL5.


Fig. 5. Comunicação do conselheiro e do painel

Ao ser executado, o conselheiro deve apresentar seus parâmetros no painel. Após clicar no botão "Aplicar alterações" e os dados terem sido alterados, o painel também deve retornar os parâmetros alterados para o conselheiro, para a sua inicialização com novos parâmetros.


Autor: Karputov Vladimir

 
Muito útil. Obrigado.
[Excluído]  
Obrigado pelo artigo! Como posso alterar a cor do fundo e da borda do próprio painel? Não encontrei essa opção nas classes padrão.
 
Maxim Dmitrievsky:
Obrigado pelo artigo! Como posso alterar a cor do fundo e da borda do próprio painel? Não encontrei essa opção nas classes padrão.
Se você usar a maneira simples, não poderá. Não procurei uma maneira complicada.
 
Maxim Dmitrievsky:
Obrigado pelo artigo! Como posso alterar a cor do fundo e da borda do próprio painel? Não encontrei isso nas classes padrão.
Substitua as definições em Defines.mqh.
 
Andrey Khatimlianskii:
Redefinir as definições em Defines.mqh.
  1. Na próxima atualização, a biblioteca padrão será restaurada e o arquivo Defines.mqh será restaurado de acordo.
  2. Não é bom editar a biblioteca padrão.
 
Karputov Vladimir:
  1. Na atualização mais próxima, a biblioteca padrão será restaurada - consequentemente, o arquivo Defines.mqh será restaurado.
  2. Não é bom editar a biblioteca padrão.
Eu não sugeri editá-la. Você deve redefini-la depois de incluir esse arquivo, mas antes de criar o painel.
[Excluído]  
Andrey Khatimlianskii:
Não sugeri que você o editasse. Você precisa substituí-lo depois de ativar esse arquivo, mas antes de criar o painel.
Você poderia me dizer como fazer isso em um exemplo simples, pois não sou muito bom em software. Eu alterei as cores das definições na própria biblioteca - a cor do painel não muda.
 
Maxim Dmitrievsky:
Por favor, diga-me como fazer isso em um exemplo simples, pois não sei muito sobre oop. Alterei as cores das definições na própria biblioteca - a cor do painel não muda

Depois de alterar o arquivo, recompile o EA e ele deverá funcionar. E não se esqueça de fazer um backup para restaurar sua variante após a atualização.

A substituição é feita usando #undef e #define. Mas você precisa colocá-los no lugar certo ;)

 
Andrey Khatimlianskii:

A substituição é feita com #undef e #define. Mas você precisa colocá-los no lugar certo ;)

O único detalhe que distingue ... de ... .
[Excluído]  
Andrey Khatimlianskii:

Depois de alterar o arquivo, recompile o EA e ele deverá funcionar. E não se esqueça de fazer um backup para restaurar sua variante após a atualização.

A substituição é feita usando #undef e #define. Mas você precisa colocá-los no lugar certo ;)

Bem, foi assim que fiz, mas nada funciona. O painel continua branco como antes

O compilador escreve Macro redifinition, ou seja, é um tipo de substituição....

//+------------------------------------------------------------------+
//|MyPanel.mqh
//|Direitos autorais © 2013, DeltaTrader |
//| http://www.deltatrader.com.br 
//+------------------------------------------------------------------+
#property copyright     "DeltaTrader © 2013"
#property link          "www.deltatrader.com.br"
#property version       "1.000"
#property description   "Test Panel"
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Inclui|
//+------------------------------------------------------------------+
#include <Controls\Dialog.mqh>
#include <Controls\Label.mqh>
#include <Controls\Panel.mqh>
#include <Controls\Edit.mqh>
#include <Controls\Defines.mqh>

#define  CONTROLS_DIALOG_COLOR_BORDER_LIGHT  C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_BORDER_DARK  C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_BG            C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_CAPTION_TEXT  C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_CLIENT_BG     C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_CLIENT_BORDER C'0x00,0x00,0xFF'

//+------------------------------------------------------------------+
//| Parâmetros globais|
//+------------------------------------------------------------------+
int      panelXX     =  200;
int      panelYY     =  200;
int      panelWidth  =  600;
int      panelHeight =  400;

CAppDialog m_panel;

//--- Objetos de lance
CPanel m_bidcolor;
CLabel m_bidlabel;
 

//--- Pergunte aos objetos
CPanel m_askcolor;
CLabel m_asklabel;
CEdit m_edit;
//+------------------------------------------------------------------+
//| Na inicialização|
//+------------------------------------------------------------------+
int OnInit() 
  {
//--- Criação de painel
   m_panel.Create(0,"blablabla",0,panelXX,panelYY,panelWidth,panelHeight);
//--- Rótulo e cores do lance
   m_bidcolor.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30);
   m_bidcolor.ColorBackground(clrYellow);
   m_panel.Add(m_bidcolor);
   
   m_bidlabel.Create(0,"Bid Text",0,5,5,0,0);
   m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
   m_bidlabel.Color(clrBlue);
   m_panel.Add(m_bidlabel);
//--- Pergunte aos rótulos e às cores
   m_askcolor.Create(0,"Ask Background Color",0,1,1,panelWidth-30,30);
   m_askcolor.ColorBackground(clrAqua);
   m_panel.Add(m_askcolor);
   
   m_asklabel.Create(0,"Ask Text",0,5,30,0,0);
   m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits));
   m_asklabel.Color(clrRed);
   m_panel.Add(m_asklabel);
   
   m_edit.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30);
   m_panel.Add(m_edit);
//--- Painel de execução
   m_panel.Run();
   return(0);
  }
//+------------------------------------------------------------------+
//| No DeInit|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Destruir painel
   m_panel.Destroy(reason);
//--- Excluir todos os objetos
   ObjectsDeleteAll(0,0);
  }
//+------------------------------------------------------------------+
//| No cálculo|
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//--- Uma etiqueta de oferta muito simples
   m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
//--- Um rótulo de solicitação muito simples
   m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits));
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Evento no gráfico|
//+------------------------------------------------------------------+

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- Mova o painel com o mouse
   m_panel.ChartEvent(id,lparam,dparam,sparam);
//--- 
  }
//+------------------------------------------------------------------+