Discusión sobre el artículo "Cómo añadir rápidamente un panel de control a un indicador o asesor" - página 2

 
Maxim Dmitrievsky:

Bueno, eso es lo que hice, nada funciona. El panel sigue blanco como antes.

El compilador dice Macro redifinition, es decir, como overdivided....

Usa mi primer consejo, simplemente reemplaza los colores en el archivo original y recompila el EA.

Para recordar como redefiní los colores en mi panel, tengo que rebuscar, pero ahora no tengo tiempo.

 

Por Historia:

Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading

Por qué el panel se aleja al actualizar la configuración del Asesor Experto?

Andrey Khatimlianskii, 2016.03.10 13:17

Aproximadamente así:

// ¡Antes de conectar Dialog.mqh!
#include <Controls\Defines.mqh>

//--- Olvida los viejos colores
#undef   CONTROLS_DIALOG_COLOR_BORDER_LIGHT
#undef   CONTROLS_DIALOG_COLOR_BORDER_DARK
#undef   CONTROLS_DIALOG_COLOR_BG
#undef   CONTROLS_DIALOG_COLOR_CAPTION_TEXT
#undef   CONTROLS_DIALOG_COLOR_CLIENT_BG
#undef   CONTROLS_DIALOG_COLOR_CLIENT_BORDER

//--- Establecer nuevos colores
#define  CONTROLS_DIALOG_COLOR_BORDER_LIGHT  clrWhite            // Color del borde del diálogo (exterior)
#define  CONTROLS_DIALOG_COLOR_BORDER_DARK   C'0xB6,0xB6,0xB6'   // Color del borde del diálogo (interior)
#define  CONTROLS_DIALOG_COLOR_BG            clrLightGreen       // Fondo del diálogo (debajo del título y alrededor del área del cliente)
#define  CONTROLS_DIALOG_COLOR_CAPTION_TEXT  C'0x28,0x29,0x3B'   // Color del texto del diálogo
#define  CONTROLS_DIALOG_COLOR_CLIENT_BG     clrAliceBlue        // Color de fondo del área cliente
#define  CONTROLS_DIALOG_COLOR_CLIENT_BORDER C'0xC8,0xC8,0xC8'   // Color del área cliente

// Ahora conecte
#include <Controls\Dialog.mqh>

 

¿Puedes darme un ejemplo simple de cómo CWndContainer debe ser retorcido para mostrar al menos algún cuadrado en la pantalla de chat usando .Show()?

Lo he intentado todo, por ejemplo, así, pero ni error, ni imagen, ni rastro de .Show() funcionando

#include <Controls\WndContainer.mqh>

class MyWndContainer : public CWndContainer  {
   public:
      MyWndContainer(string name);
};

//+------------------------------------------------------------------+
//| Constructor|
//+------------------------------------------------------------------+
MyWndContainer::MyWndContainer(string name) {
   m_chart_id = ChartID();
   m_subwin = 0;
   m_name = name;
                   m_id = 0;
                   m_align_top = 5;
                   m_align_right = 5;
                   m_align_left = 5;
                   m_align_bottom = 5;
                   m_mouse_x = 100;
                   m_mouse_y = 100;
                   m_align_flags = ALIGN_CENTER;
                   m_prop_flags = PROGRAM_EXPERT;
                   m_mouse_flags = MOUSE_EMPTY;
} 
 
Evgeny Potapov:

¿Puedes darme un ejemplo simple de como CWndContainer debería ser retorcido para mostrar al menos algún cuadrado en la pantalla de chat usando .Show()?

Lo he intentado todo, por ejemplo, así, pero ni error, ni imagen, ni rastro de .Show() funcionando.

¿Por qué CWndContainer? ¿Qué debería obtener al final?
 

No entiendo la lógica aquí:

//+------------------------------------------------------------------+
//| Hace visible el grupo de controles ||
//+------------------------------------------------------------------+
bool CWndContainer::Show(void)
  {
//--- bucle por elementos del grupo
   int total=m_controls.Total();
   for(int i=0;i<total;i++)
     {
      CWnd *control=Control(i);
      //--- comprobación del puntero
      if(control==NULL)
         continue;
      control.Show();
     }
//--- llamada al método de la clase padre
   return(CWnd::Show());
  }

¿Qué pasa si tengo un objeto Button y no tiene un método .Show().

¿No puede estar contenido en un contenedor?

 
Karputov Vladimir:
¿Por qué CWndContainer? ¿Qué deberíamos obtener al final?
Un panel con botones de Compra - Venta y algunas notificaciones más sobre el estado del Asesor Experto. Pero debería ser arrastrado en la pantalla con el ratón, pero el botón no se arrastra.
 
Evgeny Potapov:
Un panel con botones de Compra - Venta y algunas notificaciones más sobre el estado del Asesor Experto. Pero se debe arrastrar en la pantalla con el ratón, pero el botón no se arrastra.
Después de crear un objeto (botón, lista, campo de texto, etc.) este objeto debe ser añadido al panel (método Add). Entonces, al arrastrar el panel, todos los objetos se moverán junto con el panel.
 
Karputov Vladimir:
Después de crear un objeto (botón, lista, campo de texto, etc.) este objeto debe añadirse al panel (método Añadir). Entonces al arrastrar el panel, todos los objetos se moverán junto con el panel.

¿Así?

#include <Controls\Button.mqh>
#include <MyControls\MyWndContainer.mqh>

CButton *MyButton;
CWndContainer  *MyContainer;
//+------------------------------------------------------------------+
//| Función de inicialización experta|
//+------------------------------------------------------------------+
int OnInit()  {
   MyButton = new CButton;
   if(CheckPointer(MyButton) == POINTER_INVALID) return(INIT_FAILED);
   MyButton.Create(ChartID(),WindowExpertName()+"_button",0,50,100,150,250);

   MyContainer = new MyWndContainer("MyContainer");
   if(CheckPointer(MyContainer) == POINTER_INVALID) return(INIT_FAILED);
   MyContainer.Add(MyButton);
   MyContainer.Show();
   MyContainer.Enable();

   
   return(INIT_SUCCEEDED);
}
 
Karputov Vladimir:
Después de crear un objeto (botón, lista, campo de texto, etc.) este objeto debe añadirse al panel (método Añadir). Entonces, al arrastrar el panel, todos los objetos se moverán junto con el panel.

¿O esto no es "añadir al panel"?

¿Entonces un contenedor no es un panel?

 
Evgeny Potapov:

¿O no es "añadir a un panel"?

¿Entonces un contenedor no es un panel?

Usando el archivo PanelDialog2.mqh del artículo como ejemplo:

//+------------------------------------------------------------------+
//|PanelDialog2.mqh
//| Copyright 2015, MetaQuotes Software Corp.
//| http://www.mql5.com
//+------------------------------------------------------------------+
#include <Controls\Dialog.mqh>
#include <Controls\CheckGroup.mqh>
#include <Controls\Label.mqh>
#include <Controls\Edit.mqh>
#include <Controls\Button.mqh>
//+------------------------------------------------------------------+
//| define|
//+------------------------------------------------------------------+
//--- sangrías y espacios
#define  INDENT_LEFT                         (11)      // sangría desde la izquierda (teniendo en cuenta la anchura del borde)
#define  INDENT_TOP                          (11)      // sangría desde arriba (teniendo en cuenta la anchura del borde)
#define  INDENT_RIGHT                        (11)      // sangría desde la derecha (teniendo en cuenta la anchura del borde)
#define  INDENT_BOTTOM     

Este archivo crea los elementos para un panel de diálogo. El signo del panel es la clase CDialog.

Clase CDialog

La clase CDialog es una clase del control combinado Dialog.

Descripción

La clase CDialog está diseñada para combinar visualmente un grupo de elementos heterogéneos funcionalmente relacionados.