Discusión sobre el artículo "Cómo crear un panel gráfico de cualquier nivel de complejidad" - página 5

 
@Vladimir Karputov
Vladimir ¿por qué al cerrar un panel se cierran los dos? ¿cómo evitarlo?
#include <Controls\Dialog.mqh>

CAppDialog AppWindow;
CAppDialog AppWindow2;

int OnInit()
  {
//--- crear diálogo de aplicación
   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);
//--- ejecutar aplicación
   AppWindow.Run();
   AppWindow2.Run();
   return(INIT_SUCCEEDED);
  }

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

ya tienen nombres diferentes

pantalla

Cambiar la cadena

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

no hace nada.
¿O te refieres a otra cosa?

 
Sí, efectivamente, equivocado...
 
peterlogin:
*** ¿Cómo evitarlo?

Un asesor - un panel.

 
¿Cómo hacer que un panel esté encima de objetos creados posteriormente al propio panel?

Por ejemplo encima de una línea:
ejemplo
 
peterlogin:
¿Cómo hacer que un panel esté encima de objetos creados posteriormente al propio panel?

Por ejemplo, sobre una línea:

No crees objetos gráficos después de crear el panel.

O contraer/expandir el panel.
Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
[in]  Номер подокна графика. 0 означает главное окно графика. Указанное подокно должно существовать, в противном случае функция возвращает false. Возвращает true при успешной постановке команды в очередь указанного графика, иначе false. Если объект был уже создан ранее, то производится попытка изменить его координаты. При вызове ObjectCreate...
 
Los comentarios no relacionados con este tema se han movido a "Preguntas de MQL5 MT5 MetaTrader 5 Principiantes".
 

Hola Chicos

pregunta de un autodidacta

Cuando creamos paneles con la librería ¿cómo ponemos el panel en una esquina que es diferente de la topleft?

He jugado con OBJ_PROP_Corner pero creo que hay una mejor manera usando Panel.Align y Panel.Alignment. He jugado un poco pero como no soy programador no se que parámetros pasar y como pasarlos. Por ejemplo el Panel.Alignment(CRect &rect) ¿qué significan esas cosas de Rect?

Cualquier luz muy apreciado


saludos

Diego

 
Diego :

Hola, chicos,

¡una pregunta de un autodidacta!

Cuando creamos paneles con la biblioteca ¿cómo ponemos el panel en una esquina que es diferente de la topleft?

He jugado con OBJ_PROP_Corner pero creo que hay una manera mejor usando Panel.Align y Panel.Alignment. He jugado un poco pero como no soy programador no se que parámetros pasar y como pasarlos. Por ejemplo el Panel.Alignment(CRect &rect) ¿qué significan esas cosas Rect?

Cualquier luz muy apreciado


saludos

Diego

En el momento de crear el panel, indicamos las coordenadas. Ejemplo para el archivo AppWindowEditDefine.mq5

//+------------------------------------------------------------------+
//| Función de inicialización experta|
//+------------------------------------------------------------------+
int OnInit()
  {
   
***
//--- crear diálogo de aplicación
   if(!ExtDialog.Create(0,"AppWindow Edit Define",0,40,40,380,344))
      return(INIT_FAILED);
//--- ejecutar aplicación
 

He notado que muchas veces la función *.Destroy( ) simplemente no funciona. Deja objetos en el gráfico después de llamar a la función Expert Deinit(), especialmente cuando se cambian rápidamente los marcos temporales.

Una solución sencilla es utilizar punteros, en lugar de crear, modificar y destruir directamente el objeto CAppDialog.

CAppDialog AppWindow;		//Declare CAppDialog object

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

Las funciones anteriores se convierten ahora en esto:

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

Después de crear mi clase de ventana personalizada, también creo y destruyo todos los Botones, Paneles, y otros objetos como este. Funciona de maravilla.


*Nota: Establecer la bandera de borrado y el puntero a NULL puede ser excesivo, pero no he tenido objetos sobrantes desde la implementación.

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