Você pode me dizer como chamar uma caixa de diálogo? Por exemplo, criei um painel em que há um botão "Close all positions" (Fechar todas as posições). Quando clico nesse botão, uma caixa "Tem certeza?" deve ser exibida. Sim/Não. Como implementar isso?
Atualmente, herdando do CAppDialog, criei um pequeno formulário com os botões Ok/Cancel. Ao clicar no botão Ok, adicionei uma linha
gDialogForm.Destroy();
ChartRedraw();
Mas o formulário de diálogo ainda permanece na tela. Como corrigir?
Nextor caixa de diálogo? Por exemplo, criei um painel em que há um botão "Close all positions" (Fechar todas as posições). Quando clico nesse botão, uma caixa "Tem certeza?" deve ser exibida. Sim/Não. Como implementar isso?
Atualmente, herdando do CAppDialog, criei um pequeno formulário com os botões Ok/Cancel. Ao clicar no botão "Ok", adicionei uma linha
Mas o formulário de diálogo ainda permanece na tela. Como corrigir isso?
voidOnChartEvent(constint id, // ID do eventoconstlong& lparam, // Parâmetro do tipo long eventconstdouble& dparam, // Parâmetro do tipo double eventconststring& sparam // Parâmetro de eventos do tipo string
)
{
// Fechar todas as contasif(id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,"ClosePos",0)!=-1)) {
int MB=MessageBox("Close All Positions\nAccount Profit= "+DoubleToString(AccountInfoDouble(ACCOUNT_PROFIT),2),
"Close All Positions?", MB_OKCANCEL|MB_ICONQUESTION);
if(MB==1)
ClosePosSortProfit("", -1, -1, clrGray);
}
}
Nextor caixa de diálogo? Por exemplo, criei um painel em que há um botão "Close all positions" (Fechar todas as posições). Quando clico nesse botão, uma caixa "Tem certeza?" deve ser exibida. Sim/Não. Como implementar isso?
Atualmente, herdando do CAppDialog, criei um pequeno formulário com os botões Ok/Cancel. Ao clicar no botão "Ok", adicionei uma linha
Mas o formulário de diálogo ainda permanece na tela. Como corrigir isso?
Nextor caixa de diálogo? Por exemplo, criei um painel em que há um botão "Close all positions" (Fechar todas as posições). Quando clico nesse botão, uma caixa "Tem certeza?" deve ser exibida. Sim/Não. Como implementar isso?
Atualmente, herdando do CAppDialog, criei um pequeno formulário com os botões Ok/Cancel. Ao clicar no botão "Ok", adicionei uma linha
Mas o formulário de diálogo ainda permanece na tela. Como corrigir isso?
Pegue o exemplo Close On Chart Panel e insira uma chamada "MessageBox" nos manipuladores de cliques.
No arquivo "Close On Chart Panel Dialog.mqh", faça essas alterações:
//+------------------------------------------------------------------+//| Manipulador de eventos|//+------------------------------------------------------------------+void CControlsDialog::OnClickButton1(void)
{
int answer=MessageBox("Close all Sell?","Close all Sell",MB_OKCANCEL|MB_ICONQUESTION);
if(answer==IDOK)
{
Print(__FUNCTION__);
m_trading_engine.ClosePositions(POSITION_TYPE_SELL);
}
}
//+------------------------------------------------------------------+//| Manipulador de eventos|//+------------------------------------------------------------------+void CControlsDialog::OnClickButton2(void)
{
int answer=MessageBox("Close all Buy?","Close all Buy",MB_OKCANCEL|MB_ICONQUESTION);
if(answer==IDOK)
{
Print(__FUNCTION__);
m_trading_engine.ClosePositions(POSITION_TYPE_BUY);
}
}
//+------------------------------------------------------------------+//| Manipulador de eventos|//+------------------------------------------------------------------+void CControlsDialog::OnClickButton3(void)
{
int answer=MessageBox("Close all Profit?","Close all Profit",MB_OKCANCEL|MB_ICONQUESTION);
if(answer==IDOK)
{
Print(__FUNCTION__);
m_trading_engine.CloseProfitPositions();
}
}
//+------------------------------------------------------------------+//| Manipulador de eventos|//+------------------------------------------------------------------+void CControlsDialog::OnClickButton4(void)
{
int answer=MessageBox("Close all Loss?","Close all Loss",MB_OKCANCEL|MB_ICONQUESTION);
if(answer==IDOK)
{
Print(__FUNCTION__);
m_trading_engine.CloseLossPositions();
}
}
Советник-утилита. Панель на базе класса CDialog. Кнопки на базе класса СButton. Четыре кнопки для закрытия BUY, SELL, всех прибыльных, всех убыточных. Работа по текущему символу
Estou tentando fazer o meu próprio, no meu painel, quando clico em um botão, o outro deve ser desativado e ocultado, mas quando clico na área do botão oculto, ele continua funcionando
Coloquei meus códigos aqui. Se puder me ajudar, seria ótimo.
Indicador:
//+------------------------------------------------------------------+//|Indicator_Q_Test.mq4//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_window#include <WinUser32.mqh>
#include "PanelDialog_Q.mqh"
CPanelDialogQ ExtDialog;
//+------------------------------------------------------------------+//| Função de inicialização do indicador personalizado//+------------------------------------------------------------------+intOnInit()
{
//--- mapeamento de buffers de indicadoresif(!ExtDialog.CreateQ(0,"Question",0,100,100,400,230,"This the test Question?"))
return(INIT_FAILED);
//--- executar o aplicativoif(!ExtDialog.Run())
return(INIT_FAILED);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Função de iteração de indicador personalizado|//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- valor de retorno de prev_calculated para a próxima chamadareturn(rates_total);
}
//+------------------------------------------------------------------+//| Função ChartEvent|//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam)
{
//---
ExtDialog.ChartEvent(id,lparam,dparam,sparam);
}
//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
ExtDialog.Destroy(reason);
}
Class:
//+------------------------------------------------------------------+//|PanelDialog.mqh//| Copyright 2009-2015, MetaQuotes Software Corp. |//| http://www.mql5.com//+------------------------------------------------------------------+#include <Controls\Dialog.mqh>
#include <Controls\Button.mqh>
#include <Controls\Edit.mqh>
#include <Controls\ListView.mqh>
#include <Controls\ComboBox.mqh>
#include <Controls\SpinEdit.mqh>
#include <Controls\RadioGroup.mqh>
#include <Controls\CheckGroup.mqh>
#include <Controls\Label.mqh>
#include <Controls\Scrolls.mqh>
//+------------------------------------------------------------------+//| define|//+------------------------------------------------------------------+//--- recuos e intervalos#define INDENT_LEFT_ScrollQ (11) // recuo da esquerda (com tolerância para a largura da borda) (somente para a barra de rolagem)#define INDENT_LEFTQ (11) // recuo da esquerda (com tolerância para a largura da borda)#define INDENT_TOPQ (11) // recuo a partir do topo (com tolerância para a largura da borda)#define INDENT_RIGHTQ (11) // recuo da direita (com tolerância para a largura da borda)#define INDENT_BOTTOMQ (11) // recuo da parte inferior (com tolerância para a largura da borda)#define CONTROLS_GAP_XQ (80) // intervalo por coordenada X#define CONTROLS_GAP_YQ (40) // intervalo por coordenada Y//--- para botões#define BUTTON_WIDTHQ (60) // tamanho por coordenada X#define BUTTON_HEIGHTQ (20) // tamanho por coordenada Y//--- para a área de indicação#define EDIT_HEIGHTQ (20) // tamanho por coordenada Y#define GROUP_WIDTHQ (150) // tamanho por coordenada X#define LIST_HEIGHTQ (379) // tamanho por coordenada Y#define RADIO_HEIGHTQ (56) // tamanho por coordenada Y#define CHECK_HEIGHTQ (93) // tamanho por coordenada Y//+------------------------------------------------------------------+//| Classe CPanelDialog|//| Uso: diálogo principal do aplicativo SimplePanel//+------------------------------------------------------------------+class CPanelDialogQ : public CAppDialog
{
private:
CLabel m_Label_Q_text;
CButton m_button_Yes;
CButton m_button_No;
//****************************************************public:
CPanelDialogQ(void);
~CPanelDialogQ(void);
//--- criarvirtualbool CreateQ(constlong chart,conststring name,constint subwin,constint x1,constint y1,constint x2,constint y2,string QText);
//--- manipulador de eventos de gráficovirtualbool OnEvent(constint id,constlong &lparam,constdouble &dparam,conststring &sparam);
protected:
//--- criar controles dependentesbool CreateLabel_Q_text(string QT);
bool CreateButton_Yes(void);
bool CreateButton_No(void);
void OnClick_button_Yes(void);
void OnClick_button_No(void);
};
//+------------------------------------------------------------------+//| Tratamento de eventos|//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CPanelDialogQ)
//+------------------------------------------------------------------+//||//+------------------------------------------------------------------+
ON_EVENT(ON_CLICK,m_button_Yes,OnClick_button_Yes)
ON_EVENT(ON_CLICK,m_button_No,OnClick_button_No)
//+------------------------------------------------------------------+//||//+------------------------------------------------------------------+
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+//| Construtor|//+------------------------------------------------------------------+
CPanelDialogQ::CPanelDialogQ(void)
{
}
//+------------------------------------------------------------------+//| Destruidor|//+------------------------------------------------------------------+
CPanelDialogQ::~CPanelDialogQ(void)
{
}
//+------------------------------------------------------------------+//| Criar|//+------------------------------------------------------------------+bool CPanelDialogQ::CreateQ(constlong chart,conststring name,constint subwin,constint x1,constint y1,constint x2,constint y2,string QText)
{
if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
return(false);
//--- criar controles dependentesif(!CreateLabel_Q_text(QText))
return(false);
if(!CreateButton_Yes())
return(false);
if(!CreateButton_No())
return(false);
//--- bem-sucedidoreturn(true);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//+------------------------------------------------------------------+bool CPanelDialogQ::CreateLabel_Q_text(string QT)
{
//--- coordenadasint x1=INDENT_LEFTQ;
int y1=INDENT_TOPQ;
int x2=ClientAreaWidth()-(INDENT_RIGHTQ+BUTTON_WIDTHQ+CONTROLS_GAP_XQ);
int y2=y1+EDIT_HEIGHTQ;
//--- criarif(!m_Label_Q_text.Create(m_chart_id,"QT",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_Label_Q_text.Text(QT))
return(false);
if(!m_Label_Q_text.FontSize(12))
return(false);
if(!m_Label_Q_text.Color(clrBlack))
return(false);
if(!m_Label_Q_text.ColorBorder(clrBlack))
return(false);
if(!m_Label_Q_text.ColorBackground(clrBlack))
return(false);
// se(!m_edit.ReadOnly(true))// return(false);if(!Add(m_Label_Q_text))
return(false);
m_Label_Q_text.Alignment(WND_ALIGN_WIDTH,INDENT_LEFTQ,0,INDENT_RIGHTQ+BUTTON_WIDTHQ+CONTROLS_GAP_XQ,0);
//--- bem-sucedidoreturn(true);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+bool CPanelDialogQ::CreateButton_Yes(void)
{
//--- coordenadasint x1=INDENT_LEFTQ;
int y1=INDENT_TOPQ+CONTROLS_GAP_YQ;
int x2=x1+BUTTON_WIDTHQ;
int y2=y1+BUTTON_HEIGHTQ;
//--- criarif(!m_button_Yes.Create(m_chart_id,m_name+"Yes",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_button_Yes.Text("Yes"))
return(false);
if(!Add(m_button_Yes))
return(false);
m_button_Yes.Alignment(WND_ALIGN_RIGHT,0,0,INDENT_RIGHTQ+CONTROLS_GAP_XQ*2,0);
//--- bem-sucedidoreturn(true);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+bool CPanelDialogQ::CreateButton_No(void)
{
//--- coordenadasint x1=INDENT_LEFTQ+CONTROLS_GAP_XQ;
int y1=INDENT_TOPQ+CONTROLS_GAP_YQ;
int x2=x1+BUTTON_WIDTHQ;
int y2=y1+BUTTON_HEIGHTQ;
//--- criarif(!m_button_No.Create(m_chart_id,m_name+"NO",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_button_No.Text("NO"))
return(false);
if(!Add(m_button_No))
return(false);
m_button_No.Alignment(WND_ALIGN_RIGHT,0,0,INDENT_RIGHTQ+CONTROLS_GAP_XQ*1,0);
//--- bem-sucedidoreturn(true);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+void CPanelDialogQ::OnClick_button_Yes(void)
{
Print("OnClick_button_Yes", "Last Error: ",GetLastError());
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+void CPanelDialogQ::OnClick_button_No(void)
{
Print("OnClick_button_No", "Last Error: ",GetLastError());
m_button_Yes.Hide();
m_button_Yes.Disable();
m_button_Yes.Deactivate();
}
//+------------------------------------------------------------------+
Isso é proibido. O painel está vinculado ao gráfico.
Muito obrigado. Estou vendo.
Posso fazer mais uma pergunta, por favor?
Quero criar um painel para mostrar uma tabela como esta
Mas só consigo encontrar o controle abaixo. Isso significa que o painel não é compatível com a criação da tabela?
CLabel
Controle baseado no objeto gráfico "Rótulo de texto".
CBmpButton
Controle baseado no objeto gráfico "Bitmap label" (rótulo de bitmap)
CButton
Controle baseado no objeto gráfico "Botão".
CEdit
Controle baseado no objeto gráfico "Edit field" (campo de edição)
CPanel
Controle baseado no objeto gráfico "Rectangle label" (rótulo de retângulo)
CPicture
Controle, baseado no "rótulo Bitmap"
Muito obrigado. Estou vendo.
Posso fazer mais uma pergunta, por favor.
Quero criar um painel para mostrar uma tabela como esta
Mas só consigo encontrar o controle abaixo. Isso significa que o painel não é compatível com a criação da tabela?
CLabel
Controle baseado no objeto gráfico "Rótulo de texto".
CBmpButton
Controle baseado no objeto gráfico "Bitmap label".
CButton
Controle baseado no objeto gráfico "Botão".
CEdit
Controle baseado no objeto gráfico "Edit field" (campo de edição)
CPanel
Controle baseado no objeto gráfico "Rectangle label" (rótulo de retângulo)
CPicture
Controle, baseado no "rótulo Bitmap"
Você mesmo precisa criar a tabela. Procure exemplos em artigos e no CodeBase.
Você mesmo precisa criar a tabela. Procure exemplos em Artigos e no CodeBase.
Ok, muito obrigado. Acho que sim.
Tentarei encontrá-los no artigo e na base de código.
Mais uma vez, obrigado por seu apoio .
Estou tentando criar uma barra de rolagem vertical sem vincular ao painel, apenas no gráfico, mas isso não funciona por algum motivo.
Por exemplo, com uma caixa de seleção, esse código reage a um clique do mouse. O tique aparece e desaparece.
Mas com uma rolagem vertical, não há reação aos cliques do mouse.
Você pode me dizer quem sabe como fazer esse elemento combinado funcionar em um gráfico?
Você pode me dizer como chamar uma caixa de diálogo?
Por exemplo, criei um painel em que há um botão "Close all positions" (Fechar todas as posições). Quando clico nesse botão, uma caixa "Tem certeza?" deve ser exibida. Sim/Não. Como implementar isso?
Atualmente, herdando do CAppDialog, criei um pequeno formulário com os botões Ok/Cancel. Ao clicar no botão Ok, adicionei uma linha
gDialogForm.Destroy(); ChartRedraw();Mas o formulário de diálogo ainda permanece na tela.
Como corrigir?
Por exemplo, criei um painel em que há um botão "Close all positions" (Fechar todas as posições). Quando clico nesse botão, uma caixa "Tem certeza?" deve ser exibida. Sim/Não. Como implementar isso?
Atualmente, herdando do CAppDialog, criei um pequeno formulário com os botões Ok/Cancel. Ao clicar no botão "Ok", adicionei uma linha
Mas o formulário de diálogo ainda permanece na tela.
Como corrigir isso?
Por exemplo, criei um painel em que há um botão "Close all positions" (Fechar todas as posições). Quando clico nesse botão, uma caixa "Tem certeza?" deve ser exibida. Sim/Não. Como implementar isso?
Atualmente, herdando do CAppDialog, criei um pequeno formulário com os botões Ok/Cancel. Ao clicar no botão "Ok", adicionei uma linha
Mas o formulário de diálogo ainda permanece na tela.
Como corrigir isso?
Por exemplo, criei um painel em que há um botão "Close all positions" (Fechar todas as posições). Quando clico nesse botão, uma caixa "Tem certeza?" deve ser exibida. Sim/Não. Como implementar isso?
Atualmente, herdando do CAppDialog, criei um pequeno formulário com os botões Ok/Cancel. Ao clicar no botão "Ok", adicionei uma linha
Mas o formulário de diálogo ainda permanece na tela.
Como corrigir isso?
Pegue o exemplo Close On Chart Panel e insira uma chamada "MessageBox" nos manipuladores de cliques.
No arquivo "Close On Chart Panel Dialog.mqh", faça essas alterações:
Result:
Olá, obrigado por seu incrível tutorial
Estou tentando fazer o meu próprio, no meu painel, quando clico em um botão, o outro deve ser desativado e ocultado, mas quando clico na área do botão oculto, ele continua funcionando
Coloquei meus códigos aqui. Se puder me ajudar, seria ótimo.
Indicador:
Class: