Discussão do artigo "Como criar um painel gráfico de qualquer nível de complexidade" - página 5

 
@Vladimir Karputov
Vladimir por que, ao fechar um painel, os dois painéis se fecham? como evitar isso?
#include <Controls\Dialog.mqh>

CAppDialog AppWindow;
CAppDialog AppWindow2;

int OnInit()
  {
//--- criar diálogo de aplicativo
   if(!AppWindow.Create(0,"AppWindow",0,20,20,360,324))
      return(INIT_FAILED);
   if(!AppWindow2.Create(0,"AppWindow",0,20+400,20,360+400,324))
      return(INIT_FAILED);
//--- executar o aplicativo
   AppWindow.Run();
   AppWindow2.Run();
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
//--- destruir o diálogo
   AppWindow.Destroy(reason);
   AppWindow2.Destroy(reason);
  }
//+------------------------------------------------------------------+
//| Função de evento de gráfico especializado|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // ID do evento 
                  const long& lparam,   // parâmetro de evento do tipo longo
                  const double& dparam, // parâmetro de evento do tipo double
                  const string& sparam) // parâmetro de evento do tipo string
  {
   AppWindow.ChartEvent(id,lparam,dparam,sparam);
   AppWindow2.ChartEvent(id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+
Vladimir Karputov
Vladimir Karputov
  • www.mql5.com
Люди. Граждане! Огромная просьба - заполняйте свой профиль на сайте и пользуйтесь стандартными программами - устанавливайте Skype. У Skype есть очень полезная функция - показ рабочего стола. В таком случае можно оперативно подсказать по возникшей проблеме. Помните - время - деньги! Древняя народная мудрость гласит: если хочешь помочь...
 
Ruslan Khasanov:
Defina nomes diferentes para cada janela - AppWindow e AppWindow1 etc.

elas já têm nomes diferentes

tela

Alterar a string

if(!AppWindow2.Create(0,"AppWindow2",0,20+400,20,360+400,324))

não faz nada.
Ou você quer dizer outra coisa?

 
Sim, de fato, equivocado...
 
peterlogin:
*** Como evitar isso?

Um consultor - um painel.

 
Como fazer com que um painel fique em cima de objetos criados depois do próprio painel?

Por exemplo, em cima de uma linha:
exemplo
 
peterlogin:
Como fazer com que um painel fique em cima de objetos criados posteriormente ao próprio painel?

Por exemplo, sobre uma linha:

Não crie objetos gráficos depois que o painel for criado.

Ou recolher/expandir o painel.
Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
[in]  Номер подокна графика. 0 означает главное окно графика. Указанное подокно должно существовать, в противном случае функция возвращает false. Возвращает true при успешной постановке команды в очередь указанного графика, иначе false. Если объект был уже создан ранее, то производится попытка изменить его координаты. При вызове ObjectCreate...
 
Os comentários não relacionados a este tópico foram movidos para"Questions from MQL5 MT5 MetaTrader 5 Beginners".
 

Olá, pessoal,

Pergunta de um aluno que aprende sozinho!

Quando criamos painéis com a biblioteca, como colocamos o painel em um canto diferente do canto superior esquerdo?

Eu tentei usar OBJ_PROP_Corner, mas acho que há uma maneira melhor de usar Panel.Align e Panel.Alignment. Fiz algumas brincadeiras, mas, como não sou programador, não sei quais parâmetros passar e como passá-los. Por exemplo, Panel.Alignment(CRect &rect), o que significam essas coisas Rect?

Qualquer esclarecimento é muito bem-vindo


Parabéns

Diego

 
Diego :

Olá pessoal,

Pergunta de um aluno que aprende sozinho!

Quando criamos painéis com a biblioteca, como colocamos o painel em um canto diferente do canto superior esquerdo?

Eu tentei usar o OBJ_PROP_Corner, mas acho que há uma maneira melhor de usar Panel.Align e Panel.Alignment. Fiz algumas brincadeiras, mas, como não sou programador, não sei quais parâmetros passar e como passá-los. Por exemplo, o Panel.Alignment(CRect &rect), o que significam essas coisas Rect?

Qualquer esclarecimento é muito bem-vindo


Parabéns

Diego

No momento da criação do painel, indicamos as coordenadas. Exemplo para o arquivo AppWindowEditDefine.mq5

//+------------------------------------------------------------------+
//| Função de inicialização especializada|
//+------------------------------------------------------------------+
int OnInit()
  {
   
***
//--- criar caixa de diálogo do aplicativo
   if(!ExtDialog.Create(0,"AppWindow Edit Define",0,40,40,380,344))
      return(INIT_FAILED);
//--- executar o aplicativo
 

Percebi que, muitas vezes, a função *.Destroy() simplesmente não funciona. Ela deixa os objetos no gráfico depois que a função Expert Deinit() é chamada, especialmente quando os períodos de tempo mudam rapidamente.

Uma solução simples é usar ponteiros, em vez de criar, modificar e destruir diretamente o objeto CAppDialog.

CAppDialog AppWindow;		//Declare CAppDialog object

AppWindow.Destroy(...);		//Destroy Window object(s)

As funções acima agora se tornam isto:

CAppDialog *AppWindow;		//Declare CAppDialog pointer
AppWindow = new CAppDialog();	//Create new CAppDialog object at ptr address

AppWindow.Destroy(...);		//Destroy Window object(s)
delete AppWindow;		//Set the "delete" flag for objects at the ptr address (in case *.Destroy() fails)
AppWindow = NULL;		//Set the ptr address to NULL

Depois de criar minha classe de janela personalizada, eu também crio e destruo todos os botões, painéis e outros objetos como este. Funciona muito bem!


*Nota: Definir o sinalizador de exclusão e o ponteiro como NULL pode ser um exagero, mas não tive objetos sobrando desde a implementação.

Documentation on MQL5: Checkup / Point
Documentation on MQL5: Checkup / Point
  • www.mql5.com
Checkup / Point - Reference on algorithmic/automated trading language for MetaTrader 5