GUI de origem popular. Testes beta abertos.

 

Ofereço à comunidade um construtor de GUI para programas MQLpara uso gratuito.

  • O construtor da GUI é um arquivo .ex5 fechado, a fim de centralizar seu desenvolvimento e evitar confusão na distribuição de versões.
  • O motor GUI é anexado por um arquivo aberto .mqh, mas! -Não recomendo mudar o código por conta própria, sem me consultar, pois isso pode levar a erros e perda de funcionalidade.
  • Por favor, informe-me sobre bugs e defeitos.

Serei grato por sua participação construtiva.

P.S. O projeto é de origem multidisciplinar, o que significa que vamos implementá-lo juntos.

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

CONSTRUÇÃO:

  • KIB.ex5 - Construtor de GUI.
  • Arquivo GUI_DRIVE.mqh - Motor GUI na aplicação do usuário. Ela é conectada pelo arquivo.
  • Indicador KIB-source.mqh - transmissor de código de marcação dos arquivos de projeto do usuário para o construtor.

INSTRUÇÕES DE INSTALAÇÃO:

Passo 1 - desembalar:

  • Coloque o assessor KIB.ex5 na pasta Expert. (Não colocar em subpastas).
  • Coloque o arquivo GUI_DRIVE.mqh na pasta include. (Não colocar em subpastas).
  • Coloque o indicador KIB-source.mqh na pasta Indicadores. (Não colocar em subpastas).

Passo 2 - Instalar arquivos:

  • Instale o KIB.ex5 Expert Advisor em uma tabela gratuita.
  • Abra o indicador KIB-source.mqh no MetaEditor e compile-o para obter o arquivo .ex5.
  • Instale o arquivo KIB-source.ex5 resultante na mesma tabela com o Expert Advisor KIB.ex5.

Etapa 3 - preparação para o trabalho:

  • Crie uma pasta "MyProjects" para seu novo projeto GUI dentro da pasta include.
  • Criar o arquivo Window_1.mqh para escrever a marcação. Abra o arquivo.
  • Prescreva a conexão deste arquivo na parte inferior do KIB-source.mqh dentro da inicialização da matriz "source" (#include <MyProjects\Window_1.mqh>).

Passo 4 - começar:

  • Escreva o código mais simples:

//----------------------------------------------------------------------------------
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,

  • Compilar o arquivo KIB-source.mqh. Uma janela com um botão deve aparecer no gráfico.

Passo 5 - Projetar a GUI do usuário:

  • No ramo adicional, serão fornecidos tutoriais e exemplos de código para ajudar a criar a GUI desejada.

Passo 6 - Salvar a GUI personalizada:

  • Chame o menu de contexto do construtor, clicando duas vezes no gráfico.
  • Selecione o último item "Salvar projeto e imprimir arquivo API".
  • A pasta Arquivos contém dois arquivos: "CORES.mqh" e "Internal_API.mqh".
  • Mova manualmente estes arquivos para a pasta MyProjects a partir da pasta "Files".
  • O projeto é salvo.

Passo 7 - Conectar a GUI do usuário ao 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 - recebimento de eventos dos controles:

  • Os eventos chegam a uma função dentro do arquivo "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;
  
...

  • Prescrever em seus casos as reações necessárias da funcionalidade do usuário.


HH. Há uma versão compilada do construtor com recursos integrados no blog: https://www.mql5.com/ru/blogs/post/733356

Esta versão tem apenas código fonte aberto, porque os recursos estão localizados em pastas diferentes (sons e subpastas com imagens) e não há sentido em transferir tudo aqui com uma enorme quantidade de explicações.

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

Código fechado -> Marketplace.

Código aberto -> Fórum.

 
Vladimir Karputov:

Código fechado -> Marketplace.

Código aberto -> Fórum.

Certo. Vou postar o código fonte aberto do construtor. Mas, eu preciso de alguns dias para escová-lo. Você concorda em esperar?

 
Реter Konow:

Bom. Vou publicar o código fonte aberto do construtor. Mas, vou precisar de alguns dias para pentear através dele. Você concorda em esperar?

Seu tema não está indo a lugar algum.

 
"Shaw? Outra vez?!)
 
Dmitriy Skub:
"O quê? Novamente?!)
Ainda não o penteei, espere.
 
Реter Konow:


A propósito, tente criar um Projeto:


 
Vladimir Karputov:

A propósito, tente criar um Projeto:


Certo. Apenas para esclarecer. O código do construtor ou motor em si é mais de 20.000 linhas de código. Neste tópico, eu queria ensinar às pessoas como criar uma GUI em uma linguagem de marcação, não como entender o código do construtor em si. Portanto, eu quero estabelecer o código do construtor em um arquivo, para conveniência do usuário.

 
Реter Konow:

Muito bem. Apenas para esclarecer. O código do construtor ou motor em si é mais de 20.000 linhas de código. Neste tópico, eu queria ensinar às pessoas como criar uma GUI em uma linguagem de marcação, não como entender o código do construtor em si. É por isso que quero colocar o código do construtor em um arquivo, para a conveniência dos usuários.

Não. Dessa forma, cada Vendedor de Mercado iniciará sua própria filial como "Teste minha melhor EA".

 
Vladimir Karputov:

Não. É assim que cada vendedor do Mercado iniciará seu próprio fio "Teste meu melhor EA".

(risos) Está bem. Tanto faz. Vou afixar como está.

 
Реter Konow:

P.S. O projeto é de origem multidisciplinar, o que significa que o implementamos juntos.

há ou haverá crowdsourcing no projeto?

Acho que você está procurando testadores, não aqueles que vão se unir e "terminar o código" para a produção (mesmo que o código seja gratuito)