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

 
Karputov Vladimir:

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

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

Gracias.

Ahora lo probaré con CDialog, pero sigo sin entender cómo debería funcionar: el botón se hace visible inmediatamente después de la creación, ¿debería desaparecer y saltar a CDialog?

 
Evgeny Potapov:

Gracias.

Lo probaré con CDialog, pero sigo sin entender cómo debería funcionar: el botón se hace visible inmediatamente después de la creación, ¿debería desaparecer y saltar a CDialog?

Usa el modo de depuración paso a paso (F11) con puntos de interrupción y todo lo oculto se hará visible.
 
Evgeny Potapov:

Gracias.

Lo probaré con CDialog, pero sigo sin entender cómo debería funcionar: el botón se hace visible inmediatamente después de la creación, ¿debería desaparecer y saltar a CDialog?

Karputov Vladimir:

Sobre el ejemplo del archivo PanelDialog2.mqh del artículo:

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

Sí, funciona con esta clase, pero por alguna razón el diálogo no se arrastra con el ratón. Aquí:

int OnInit()  {
   MyButton = new CButton;
   if(CheckPointer(MyButton) == POINTER_INVALID) return(INIT_FAILED);
   MyDialog = new CDialog();
   if(CheckPointer(MyDialog) == POINTER_INVALID) return(INIT_FAILED);
   MyDialog.Create(ChartID(),WindowExpertName()+"_dailog",0,50,100,150,250);
   MyDialog.Add(MyButton);
   MyButton.Create(ChartID(),WindowExpertName()+"_button",0,70,120,90,190);
   MyDialog.Show();
   MyDialog.Enable();
   return(INIT_SUCCEEDED);
}
 
Vladimir Karputov:

¿Podría decirme cómo desactivar el procesamiento de todos los eventos o pulsaciones de botones durante algún tiempo (por ejemplo, durante el tiempo de apertura o cierre de posiciones)?
 
Subscribers:
¿Podría decirme cómo desactivar el procesamiento de todos los eventos o pulsaciones de botones durante algún tiempo (por ejemplo, durante el tiempo de apertura o cierre de posiciones)?
¿Y más concretamente? ¿Tiene alguna pregunta sobre los códigos de este artículo?
 
Vladimir Karputov:
¿Y más? ¿Tiene alguna pregunta sobre los códigos de este artículo?

No necesariamente este artículo... Es que no los encuentro en ninguna parte. Por ejemplo... en el artículo hay una suscripción a la gestión de eventos de botón

EVENT_MAP_BEGIN(CControlsDialog)
...
ON_EVENT(ON_CLICK,m_button_ok,OnClickButtonOK)
EVENT_MAP_END(CAppDialog)

Pregunta: ¿cómo puedo desactivar este procesamiento mediante programación (desactivar el procesamiento ON_CLICK) y volver a activarlo?

 
Subscribers:

no necesariamente según este artículo... Es que no lo encuentro por ningún lado. Por ejemplo... en el artículo hay una suscripción al manejo de eventos del botón

EVENT_MAP_BEGIN(CControlsDialog)
...
ON_EVENT(ON_CLICK,m_button_ok,OnClickButtonOK)
EVENT_MAP_END(CAppDialog)

Pregunta: ¿cómo puedo desactivar este procesamiento mediante programación (desactivar el procesamiento ON_CLICK) y volver a activarlo?

No hay forma de prohibirlo, pero puedes escribir un flag check en la función de procesamiento de clicks - si el flag es true, entonces procesamos los clicks, y si el flag es false, entonces salimos de la función.
 
Vladimir Karputov:
No hay manera de prohibirlo, pero puede escribir una comprobación de bandera en la función de procesamiento de clics - si la bandera es verdadera - entonces procesamos los clics, y si la bandera es falsa - entonces salimos de la función.
Ya he hecho eso... pero todavia no es lo mismo... por ejemplo, cuando cierro muchas ordenes presionando un boton en el panel quiero que el panel no responda completamente, de lo contrario si se hace click (en este momento) en el boton de compra, el evento todavia estara, y sera una entrada al manejador de eventos despues de que el cierre sea procesado.
 
Vladimir Karputov:
No hay manera de prohibirlo, pero puede escribir una comprobación de bandera en la función de procesamiento de clics - si la bandera es verdadera - entonces procesamos los clics, y si la bandera es falsa - entonces salimos de la función.
En general, no hay manera de hacer que el panel inactivo ?
 
Subscribers:
Ya lo he hecho. No es todo lo mismo... Por ejemplo, cuando cierro un lote de órdenes pulsando un botón en el panel, quiero que el panel no responda completamente, de lo contrario, si hago clic (en este momento) en el botón de compra, el evento seguirá ocurriendo, y habrá una entrada al manejador de eventos después de que se active el cierre.

Hacer lo correcto - procesar la bandera prohibida inmediatamente después de entrar en la función.

Aunque... Sólo un minuto....

Añadido:

No. Sólo tienes que procesar el empuje en función de la bandera prohibida.