GUI in crowdsourcing. Open beta testing.

 

Offro alla comunità un costruttore di GUI per programmi MQLper uso gratuito.

  • Il costruttore di GUI è un file .ex5 chiuso, per centralizzare il suo sviluppo ed evitare confusione nella distribuzione delle versioni.
  • Il motore GUI è collegato da un file aperto .mqh, ma! -Non vi consiglio di cambiare il codice da soli, senza consultarmi, perché può portare a errori e perdita di funzionalità.
  • Per favore, informatemi su bug e difetti.

Vi sarò grato per la vostra partecipazione costruttiva.

P.S. Il progetto è in crowdsourcing, il che significa che lo implementeremo insieme.

//-----------------------------------------------------------------------------------------------------------------

COSTRUZIONE:

  • KIB.ex5 - Costruttore di GUI.
  • File GUI_DRIVE.mqh - motore GUI nell'applicazione utente. È collegato dal file.
  • Indicatore KIB-source.mqh - marcatura del trasmettitore di codice dai file del progetto utente al costruttore.

ISTRUZIONI PER L'INSTALLAZIONE:

Fase 1 - disimballaggio:

  • Posiziona l'advisor KIB.ex5 nella cartella Expert. (Non mettere in sottocartelle).
  • Mettere il file GUI_DRIVE.mqh nella cartella include. (Non mettere in sottocartelle).
  • Metti l'indicatore KIB-source.mqh nella cartella Indicators. (Non mettere in sottocartelle).

Passo 2 - Installare i file:

  • Installa il KIB.ex5 Expert Advisor su un grafico libero.
  • Aprire l'indicatore KIB-source.mqh in MetaEditor e compilarlo per ottenere un file .ex5.
  • Installa il file risultante KIB-source.ex5 sullo stesso grafico con l'Expert Advisor KIB.ex5.

Fase 3 - preparazione al lavoro:

  • Create una cartella "MyProjects" per il vostro nuovo progetto GUI all'interno della cartella include.
  • Creare il file Window_1.mqh per scrivere il markup. Aprire il file.
  • Prescrivere il collegamento di questo file in fondo a KIB-source.mqh all'interno dell'inizializzazione dell'array "source" (#include <MyProjects\Window_1.mqh>).

Passo 4 - iniziare:

  • Scrivi il codice più semplice:

//----------------------------------------------------------------------------------
NEW_WINDOW,  W_NAME, " Hello World! ",  W_ICON, "::Images\\16x16\\Folder.bmp",  W_TYPE, SETTINGS, ALWAYS_ON_TOP,
//----------------------------------------------------------------------------------
GROUP, "Кнопка",

__,BUTTON, "Hello World!",

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//----------------------------------------------------------------------------------
END_WINDOW,

  • Compila il file KIB-source.mqh. Una finestra con un pulsante dovrebbe apparire sul grafico.

Passo 5 - Progettare la GUI dell'utente:

  • Nel ramo aggiuntivo, saranno forniti tutorial ed esempi di codice per aiutare a creare la GUI desiderata.

Passo 6 - Salvare la GUI personalizzata:

  • Chiamate il menu contestuale del costruttore facendo doppio clic sul grafico.
  • Seleziona l'ultima voce "Salva il progetto e stampa il file API".
  • La cartella Files contiene due file: "CORES.mqh" e "Internal_API.mqh".
  • Sposta manualmente questi file nella cartella MyProjects dalla cartella "Files".
  • Il progetto viene salvato.

Passo 7 - Collega la GUI dell'utente all'Expert Advisor:

//+------------------------------------------------------------------+
//|                                                   GUI Expert.mq5 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
//--------------------------------------------------------------------
#include<GUI_DRIVE.mqh>
#include<MyProject_1\CORES.mqh>
#include<MyProject_1\Internal_API.mqh> 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- create timer
   EventSetMillisecondTimer(25);
   //-------------------------
   D_OnInit();
   //-------------------------
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
   //-------------------------
   D_OnDeinit();
   //-------------------------
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //УСТАНОВИТЬ ВЫЗОВ В САМОМ НИЗУ, ПОД ПОЛЬЗ.КОДОМ.------------------
   //---------------------------
   RMSG(1);
   //---------------------------
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   //УСТАНОВИТЬ ВЫЗОВ НА САМОМ ВЕРХУ, НАД ПОЛЬЗ.КОДОМ.---------------
   //----------------------------------------------------------------
   D_OnChartEvent(id,lparam,dparam,sparam);
   //----------------------------------------------------------------
  }
//+------------------------------------------------------------------+


Passo 8 - ricevere eventi dai controlli:

  • Gli eventi arrivano a una funzione all'interno del file "Internal_API.mqh".

//========================================================================================================= 
void On_Gui_Event(int Element, string value, double Magic = 0)
{
 string action = value, selected_option = value; //DON'T CHANGE THIS LINE
//------------------------------------
 switch(Element)
   {
//=====================================================================================================================
//WINDOW:   Checkboxes | element: CHECKBOX  | name: Checkbox 1  |  Location: Window's Main Frame
//=====================================================================================================================
case CHECKBOX3___Checkbox_1:
               //------------------------------------------------------------------------------------------------------
               //What to do when checkbox checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case checked:     break;
  
                case unchecked:     break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
  
...

  • Prescrivere nei suoi casi le reazioni richieste dalla funzionalità dell'utente.


HH. C'è una versione compilata del costruttore con risorse integrate sul blog: https://www.mql5.com/ru/blogs/post/733356

Questa versione ha solo codice open source, perché le risorse si trovano in diverse cartelle (suoni e sottocartelle con immagini) e non ha senso trasferire tutto qui con un'enorme quantità di spiegazioni.

Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Функция ArrayResize() позволяет задать для массива размер с некоторым запасом для его будущего увеличения без физического перераспределения памяти. Это сделано для улучшения быстродействия, так как операции по распределению памяти...
File:
KIB-source.mq5  132 kb
GUI_DRIVE.mqh  2013 kb
KIB.zip  1470 kb
 

Codice chiuso -> Mercato.

Aprire il codice -> Forum.

 
Vladimir Karputov:

Codice chiuso -> Mercato.

Aprire il codice -> Forum.

Ok. Posterò il codice open source del costruttore. Ma ho bisogno di un paio di giorni per ripassare. Accetterà di aspettare?

 
Реter Konow:

Bene. Pubblicherò il codice open source del costruttore. Ma, avrò bisogno di un paio di giorni per passarlo al pettine. Accetterà di aspettare?

Il tuo tema non va da nessuna parte.

 
"Shaw? Ancora?!)
 
Dmitriy Skub:
"Cosa? Ancora?!)
Non l'ho ancora pettinato, aspetta.
 
Реter Konow:


A proposito, prova a creare un Progetto:


 
Vladimir Karputov:

A proposito, prova a creare un Progetto:


Ok. Solo per chiarire. Il codice del costruttore o del motore stesso è più di 20.000 righe di codice. In questo thread, volevo insegnare alla gente come creare una GUI in un linguaggio di markup, non come capire il codice del costruttore stesso. Pertanto, voglio disporre il codice del costruttore in un unico file, per comodità dell'utente.

 
Реter Konow:

Tutto a posto. Solo per chiarire. Il codice del costruttore o del motore stesso è più di 20.000 righe di codice. In questo thread, volevo insegnare alla gente come creare una GUI in un linguaggio di markup, non come capire il codice del costruttore stesso. Ecco perché voglio pubblicare il codice del costruttore in un unico file, per comodità degli utenti.

No. In questo modo, ogni venditore di mercato inizierà il proprio ramo come "Prova il mio miglior EA".

 
Vladimir Karputov:

No. È così che ogni venditore di mercato inizierà il proprio thread "Prova il mio miglior EA".

(Ok. Qualunque cosa. Lo posterò così com'è.

 
Реter Konow:

P.S. Il progetto è in crowdsourcing, il che significa che lo implementiamo insieme.

c'è o ci sarà il crowdsourcing nel progetto?

Penso che stiate cercando dei tester, non quelli che si uniranno per "finire il codice" alla produzione (anche se il codice è libero)