Discussão do artigo "MQL para "Principiantes": como projetar e construir classes de objeto" - página 2

 

Acabei de atualizar o terminal para um que pode ser baixado para ter certeza.

atualizei a biblioteca, com certeza.

executei o terminal, abri o arquivo e aqui está ele.

Gostei muito do agrupamento dos botões =))))))

Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
Файловые операции / FileOpen - Документация по MQL5
 

Você poderia fazer o upload de todos os arquivos necessários para esse aplicativo em um único arquivo e respeitar a estrutura de modo que haja uma pasta MQL5.

Verifiquei que todos os arquivos abrem normalmente e têm conteúdo legível.

 
CoreWinTT:

Você poderia fazer o upload de todos os arquivos necessários para esse aplicativo em um único arquivo e respeitar a estrutura de modo que haja uma pasta MQL5.

Verifiquei que todos os arquivos abrem normalmente e têm conteúdo legível.

Enviei para você em uma mensagem privada.
 

Obrigado.

Agora tudo funciona, ele compila normalmente, talvez o problema estivesse em um arquivo bit que foi carregado no servidor incorretamente ou talvez eu tenha tido um erro ao fazer o download, mas não percebi.

Em geral, é muito inconveniente fazer o download individual de mais de 5 arquivos; seria ótimo criar um arquivo ou um programa de instalação completo.

Continuarei a entender e tentarei colocá-lo em algum lugar, e informarei sobre os resultados.

No geral, gosto muito do funcionamento do botão de cruzamento.

Mas o botão de minimizar é decepcionante ........

não funciona e, pelo que entendi, ele deveria minimizar abaixo das seguintes linhas?

 

Em geral, o artigo é bastante informativo. Apenas muitas referências à "wikipedia".

E, portanto, acaba sendo um construtor profissional para esse menu, no qual tudo é clicado e adicionado, em geral funciona.

Também seria muito bom ter um manual simples sobre como acessar as células desse milagre.

E vamos supor que o Expert Advisor leia os valores das células no evento de tique.

E essas células seriam preenchidas com parâmetros de entrada durante o processo oninit.

Ou tenho de escrever isso eu mesmo? ????

e isso serve como um construtor visual?

 

Obrigado pelos valiosos comentários. Já me debrucei sobre eles e tentarei corrigir a maioria deles.

 

do tipo para formar um conjunto de estruturas

que estará disponível para todo o programa

e que armazenará dados nesse formato

e para poder fazer referência a esses valores

como coluna Header[1].2.

pelo menos com o tipo de dados string

Vejo que já existe algo semelhante aqui.

string Mstr[][3]=
  {
     {"MACD","",""},
     {"NEW1","metod",""},
     {"elders","new2",""},
     {"Fast","new3",""},
     {"Slow","new4",""},
     {"Signal","new5",""},
     {}
  };

como uma matriz bidimensional.

e ele repreende se você fizer algo assim.

     {"NEW1",""+TrailingStop+"",""},


Provavelmente, o getter e o setter não podem dividir o encapsulamento.

 

Cada célula tem seu próprio nome exclusivo. Você pode vê-lo ao passar o cursor do mouse sobre o objeto. O arquivo ClassMasterWindowsEXE.mqh mostra como acessar as células.

//+------------------------------------------------------------------+
//| Método de interceptação e processamento de eventos OnChartEvent()
//+------------------------------------------------------------------+
void CMasterWindowsEXE::OnEvent(const int id,
                                const long &lparam,
                                const double &dparam,
                                const string &sparam)
  {
   if(on_event) // o tratamento de eventos está ativado
     {
      //--- pressionando o botão START na janela principal
      if(id==CHARTEVENT_OBJECT_CLICK
         && StringFind(sparam,"CWin1",0)>=0
         && StringFind(sparam,"STR19",0)>0
         && StringFind(sparam,".Button",0)>0)
        {
         Generator();
        }
      //--- editar variáveis no editor EDIT STR18
      if(id==CHARTEVENT_OBJECT_ENDEDIT
         && StringFind(sparam,"CWin1",0)>=0
         && StringFind(sparam,"STR18",0)>0)
        {
         string textedit=ObjectGetString(0,sparam,OBJPROP_TEXT);
         if(StringFind(textedit,".",0)>=0)
           {
            ObjectSetString(0,sparam,OBJPROP_TEXT,"");
            ChartRedraw();
            MessageBox("O nome do arquivo não deve conter um ponto final!","Erro no nome do arquivo".,MB_OK);
           }
         else nameFile=textedit;
        }
 

mas aqui todos os parâmetros de string acabam sendo

ou seja, para cada botão, será necessário escrever um evento como

  if(id==CHARTEVENT_OBJECT_CLICK
         && StringFind(sparam,CWin1.STR2.RowType3.Button3,0)>=0
         && StringFind(sparam,"STR19",0)>0
         && StringFind(sparam,".Button",0)>0)
        {
         Generator();
        }

para o botão +

extrair o valor da string tal e tal, convertê-lo em inteiro, adicionar um e colocá-lo de volta.

e no evento ontic

apenas então

extrair o valor da cadeia de caracteres tal e tal lá converter para inteiro etc. etc.

Em geral, se houvesse uma estrutura, de modo que você pudesse definir o tipo de objetos armazenados, e o módulo de transferência de valor para a cadeia de caracteres pudesse ser implementado dentro da classe.

Entendi corretamente que o rastreamento de, por exemplo, uma célula de adição pode ser feito inserindo código em um evento.

  if(id==CHARTEVENT_OBJECT_CLICK
         && StringFind(sparam,"CWin1.STR2.RowType3.Button3",0)>=0)
        {
         Generator();
        }

 
E também estou me perguntando se o botão de minimizar funcionará.