A chegada de uma nova geração de software comercial. Como deve ser a interface EA? - página 12

 
Yury Kulikov:
Como tudo está bagunçado :)
Eu estava falando de um exemplo de criação de interface usando seu indicador de navegador de arquivos, implementado no Expert Advisor. Mas não se apegue às palavras "navegador de arquivos", é um exemplo de tarefa, e pode haver muitas tarefas semelhantes em Consultores Especialistas: navegador de janelas de terminal, objetos na carta, indicadores no terminal ... E isto é apenas uma pequena camada de tarefas que pode ser implementada através de uma lista (tabela) de cordas que você quer obter em seu indicador através de variáveis globais.
Estou ficando um pouco confuso agora, e estou perdendo um pouco do significado de seus cargos. Minhas desculpas. Um pouco mais tarde descreverei em detalhes o conceito do motor, do estúdio, da interface e da EA. Depois disso, podemos discutir o assunto. :)
 

1. O conceito do motor gráfico.

2. Conceito do núcleo gráfico.

3. estágios de criação de um estúdio visual para a plataforma MT.

4. descrição do mecanismo de criação da interface EA.


1. O motor gráfico é um programa feito como um indicador. Este programa é projetado exclusivamente para a gestão da interface do usuário. Ele executa um conjunto de funções básicas:

  • Carregando o núcleo da interface gráfica a partir de um arquivo.
  • Salvando as configurações da interface do usuário.
  • Implementação de uma gestão única e coesa de todos os processos na interface. Ele implementa a interface "mecânica" incluindo: abrir e fechar janelas, redimensionar janelas, mover janelas, fundir janelas, fazer zoom, reproduzir scripts, alterar estados de objetos, ligar objetos, controlar valores de parâmetros de controles de acordo com seus tipos e propriedades, criar e excluir variáveis globais.

O motor gráfico é adicionado ao gráfico como qualquer outro indicador. Ela inclui o seguinte conjunto de janelas:

  • Barra de tarefas, no lado direito da qual vários ícones serão adicionados para chamar as janelas de serviço do próprio motor.
  • Navegador de arquivos, que será usado para selecionar o arquivo de inicialização a partir de uma lista de arquivos com interfaces localizadas em pasta especial.
  • Janelas de ajustes opcionais, que não desempenham um papel principal nesta fase.

Este é, em princípio, o fim do conceito do motor gráfico. O que é importante é que a interface não pode funcionar sem ela.



2. Um kernel gráfico é um bloco de informações contendo dados de todos os objetos e janelas em uma interface, que é registrado em um array e salvo em um arquivo.

Este bloco é uma representação digital da interface gráfica. Ele é carregado pelo motor gráfico por instrução do usuário. O próprio motor gráfico tem seu próprio kernel gráfico interno que assegura o funcionamento de suas próprias janelas e dentro deste kernel o espaço livre é alocado para a integração da interface do usuário (na forma digital) na mesma. A integração é realizada no processo de carregamento do núcleo gráfico a partir de um arquivo.


3. A criação de um estúdio visual na plataforma MT, como eu a entendo, está dividida em duas etapas:

  • Na primeira etapa, será criada uma versão baseada em arquivos do construtor da interface. Nele, o usuário trabalhará com os modelos de mesa. Nas tabelas, o usuário escreverá os tipos e nomes dos elementos de interface e definirá as propriedades de seus parâmetros. A criação será extremamente fácil para o usuário, ele não terá que se preocupar com o posicionamento correto de seus elementos nas janelas (o motor calculará tudo automaticamente) e será suficiente apenas para organizar os elementos na ordem necessária.
  • Na segunda fase, será criado um ambiente visual que implementa o mesmo método de construção de interface que o construtor de arquivos, só que será mais fácil e mais conveniente de usar. Também acrescentará a capacidade de mudar a aparência dos controles. Em geral, o usuário terá mais opções gráficas.


4. Quero delinear o mecanismo de criação de uma interface em termos gerais e levantar um pouco o véu sobre sua tecnologia. Explique de onde virá a facilidade de criar uma interface através de um arquivo.

Este é o caso: o motor tem uma função especial que cria um kernel gráfico completo baseado em um único arquivo com uma quantidade mínima de informações de carga. As informações de inicialização neste arquivo são auto-explicativas e legíveis por humanos. É fácil de escrever e editar. Por exemplo, você precisa escrever "_CREATE_NEW_WINDOW" para criar uma janela, e "_CHECKBOX" e nome da caixa de seleção, (motor reconhece automaticamente o nome do elemento, como nome do próprio elemento e como nome de seu parâmetro).

Esta função é chamada de "G_CORE_BUILDER()" e constrói o núcleo gráfico tomando dados de duas fontes principais: um arquivo de inicialização criado pelo usuário e a matriz "CONTENT[]", que contém todos os grupos de objetos padrão incluídos nas plataformas e controles de janela. O "CONTEÚDO[]" também contém estados e scripts de objetos. Tudo em uma só matriz. Em geral, o material fonte do "CONTENT[]" + o arquivo carregador criado pelo usuário é usado por "G_CORE_BUILDER()" para construir o núcleo gráfico com o qual o motor trabalha.

 

Para evitar confusão, gostaria de acrescentar que o arquivo de inicialização pode ser em dois formatos:

1. Sob a forma de um conjunto de instruções definidas pelo usuário, que descrevem janelas, controles e propriedades de seus parâmetros. Neste caso, na fase de carregamento, a função "G_CORE_BUILDER()" é lançada e constrói o núcleo gráfico.

2. Na forma de um núcleo gráfico pronto que é carregado diretamente no motor. Nesta variante, não há necessidade de usar a função "G_CORE_BUILDER()".

A primeira opção seria usada no construtor da interface e a segunda para executar a interface pronta de qualquer aplicação.

Uma versão simplificada do motor irá carregar o kernel gráfico pronto, do qual o sistema de construção do kernel ("G_CORE_BUILDER()" e a matriz "CONTENT[]" será removida) para simplificar seu funcionamento.
 
Реter Konow:
Fazer um desenho ainda não é uma interface, a questão mais importante que você não está mencionando é como o Expert Advisor irá interagir com o indicador, as"variáveis globais" soam de alguma forma vagas.
 
Yury Kulikov:
Fazer um desenho ainda não é a interface, a questão mais importante que você não está mencionando - como a EA irá interagir com o indicador, através das"variáveis globais" soa de alguma forma vaga.
No momento, o sistema de interação do Expert Advisor com a interface implementada no indicador com variáveis globais está apenas no papel, e eu não tive nenhuma experiência em sua criação. Vou tentar descrever minha idéia com mais detalhes, e se você encontrar contradições ou erros nela, por favor, comente.

1. Deixe-me lembrá-lo do que todos sabem - cada variável global está no escopo de todos os programas carregados no gráfico. Para criar uma variável global, você deve chamar a função especial e passar a ela o nome da variável e seu valor.

2. As variáveis globais serão criadas pelo motor no estágio de carregamento da interface, que lerá o arquivo de inicialização. Os nomes das variáveis globais e seus valores salvos (ou pré-definidos) serão escritos no próprio arquivo de inicialização.

3. Há um bloco especial dentro do motor que é responsável por controlar os valores dos parâmetros dos controles de acordo com o tipo de elemento, o tipo de seu valor e as propriedades do parâmetro. Quando o usuário marca uma caixa de seleção ou remapeia um valor em um elemento de 'edição de spin', o bloco de interação de parâmetros do controle executa ações específicas sobre um valor específico, uma variável específica.

4. Devido ao fato de a variável ser global, seu valor será constantemente "observado" pelo Expert Advisor, e ele reagirá às mudanças do valor de cada uma das variáveis globais de acordo com os algoritmos nela embutidos.

5. O Expert Advisor não apenas "observa" as variáveis globais, mas trabalha completamente com seus valores a partir de sua funcionalidade. Neste caso, é importante entender que as variáveis globais serão divididas condicionalmente em dois tipos: variáveis "controladas" pelo usuário, cujos valores serão definidos pelo usuário através dos controles na interface, e variáveis "controladas" pela funcionalidade EA, cujos valores serão definidos pelas funções do usuário.

6. O motor, por sua vez, funcionará com ambos os tipos de variáveis globais condicionais. Descrevi o princípio de trabalhar com valores de variáveis "sob controle" do usuário, e o princípio de trabalhar com valores "sob controle" da funcionalidade EA será o seguinte: o mesmo bloco divide condicionalmente os controles em duas categorias: aqueles que controlam o valor, e aqueles que exibem o valor (exibindo-o de qualquer forma). Cada um desses controles (campo de entrada, barra de progresso, etc...) é subscrito ao evento de mudança de valor de sua variável. Assim que o valor de qualquer variável muda, o bloco se refere ao elemento correspondente e realiza a manipulação com esse elemento, que é fornecido no tipo de elemento por padrão.

Observe que o bloco percorre todas as variáveis globais na freqüência do temporizador, "seguindo" assim o comportamento dos valores das variáveis funcionalmente controladas.

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
P.S. Quanto à questão sobre como carregar as configurações da EA a partir da interface do usuário, em minha mente, será feito da seguinte forma:

Os valores de todas as variáveis globais, com as quais a EA opera (incluindo aquelas que representam as configurações da EA), serão armazenados no arquivo de carga antes de serem destruídos no evento de descarga da EA. A cada carregamento da interface, estas mesmas variáveis globais serão criadas novamente e tomarão seus valores originais. Em seguida, o Expert Advisor será carregado e acessará suas variáveis.
 
Реter Konow:

Como o texto (por exemplo, nome do arquivo) pode ser passado através de uma variável global?

Como o Expert Advisor pode ativar/desativar uma janela?

Como o Expert Advisor pode criar uma nova janela enquanto o Expert Advisor está em funcionamento?

...

 
Yury Kulikov:

1. Como passo texto (por exemplo, nome de arquivo) através de uma variável global?

2. Como o especialista pode ativar/desativar a janela?

3. Como o Expert Advisor pode criar uma nova janela enquanto o Expert Advisor está em funcionamento?

...

1. esta tarefa ainda não foi resolvida. Posso sugerir um par de variantes, por um palpite:

a) Passando a cadeia por meio do próprio nome da variável global. Como as variáveis são indexadas, o motor e o Expert Advisor sempre precisam "conhecer" o índice da variável global a ser apagada e criada novamente para transferir o texto, mudando seu nome a cada vez e passando a cadeia através dele. À primeira vista, a opção parece confusa, mas quem sabe, talvez possa ser melhorada...

b) Para transmitir uma cadeia com valor de uma variável, consecutivamente com letras, onde ao invés das próprias letras serão transmitidos os números correspondentes, e o processo de transmissão será realizado em n-números de períodos de tempo.

2. No momento, meu conceito carece de método de ativação/desativação de janelas no lado EA. Para ser honesto, não tenho bem a certeza do que você quer dizer. As janelas só serão tratadas pelo usuário e pelo motor. O Expert Advisor trata apenas de variáveis e de suas próprias funções. Ele ainda não tem acesso à interface. (E qual é o objetivo?).

3. novas janelas (compostas), que o usuário pode agrupar conjuntos de janelas (componentes) a seu critério, serão criadas pelo motor e não pelo Expert Advisor. por exemplo, clicando no item do menu principal "nova janela". É importante que todas as janelas agrupadas já estejam criadas na interface e o número de janelas compostas usadas para agrupar as informações necessárias do usuário pode ser (condicionalmente) ilimitado. Os conjuntos de janelas e seu conteúdo serão salvos em um arquivo.

 
Реter Konow: Ela ainda não tem acesso à interface. (E qual é o objetivo disso?)

O ponto é fundamental. Os eventos não ocorrem apenas na interface.

Haverá mais de um iceberg no caminho do seu Titanic. Você iniciou o projeto pelo lado errado e as variáveis globais não ajudarão aqui.

 
Yury Kulikov:

O ponto é fundamental. Os eventos não ocorrem apenas na interface.

Haverá mais de um iceberg no caminho do seu Titanic. Você iniciou o projeto do lado errado e as variáveis globais não ajudarão.

Bem, em que vantagem você acha que eu deveria ter começado o projeto, e o que pode me ajudar?
 
Реter Konow:
OK, mas onde você acha que eu deveria ter começado o projeto, e o que pode me ajudar?

Acho que devemos partir do especialista. Eu dei três tipos de tarefas que são relevantes para o especialista, mas afinal elas não são viáveis em sua interface.

O que poderia ajudar? Talvez uma integração mais profunda, ou limitar o projeto ao "controle remoto".