Fazendo um projeto de crowdsourced em Tela - página 37

 
Алексей Барбашин:

Do exposto acima, pode-se entender que um elemento da estrutura é um controle de diálogo específico, contém suas próprias propriedades e pode conter controles aninhados. O conjunto de propriedades de tal controle universal é limitado apenas pela imaginação do desenvolvedor.

É claro que podemos evitar a estrutura e descrever as propriedades dos controles em uma matriz multidimensional, mas não é inicialmente econômico porque precisamos lembrar claramente qual índice do controle armazena qualquer propriedade. E a matriz não pode conter tipos de dados heterogêneos. Acontece que a descrição do elemento de controle na programação processual só é possível através das estruturas. Ou seja, o elemento da estrutura é um controle concreto, ou seja, o objeto concreto do diálogo com suas propriedades.

Na biblioteca padrão, há uma pasta Genéricos in Include, que contém a classe CHashMapque implementa a interface de valor chave.
Um único objeto pode ter um conjunto de valores de qualquer tipo. Embora a árvore do mapa demore muito tempo para rodar, ela funciona muito rápido.
Pode até funcionar para descrever propriedades, deve tentar em geral.
Ou usar outro tipo de classe desta biblioteca, que é mais adequado para a tarefa.

Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных
Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных
  • www.mql5.com
Библиотека содержит классы и интерфейсы для определения шаблонных коллекций, которые, в свою очередь, дают пользователю возможность создавать строго типизированные коллекции. Они обеспечивают большее удобство и высокую производительность работы с данными, чем обычные типизированные коллекции.
 

Leia novamente, ou seja, você propõe armazenar um array igual a um array de pixels, a fim de armazenar informações neste array (no seu caso "qual número de função" deve ser usado para processamento). ?

 
Maxim Kuznetsov:

Depois haverá o inverso - ligando a interface com o gráfico. Por exemplo, faça um botão que esteja estritamente ligado ao tempo e ao preço.

Uma GUI separada pode ser escrita em pouco tempo - com todas as tabelas, abas, menus e apitos. Em C# ou mesmo BASIC. E dentro da tabela é um problema significativo para aplicações externas.

E então, por que amarrar a interface ao gráfico?
Afinal, você pode obter quaisquer dados, como carimbos de data e preços, diretamente das funções relevantes.

 
Alexandr Andreev:

Leia novamente, ou seja, você propõe armazenar um array igual a um array de pixels, a fim de armazenar informações neste array (no seu caso "qual número de função" deve ser usado para processamento). ?

Se você está me perguntando, eu não sugeri nada parecido. Eu não sugeri absolutamente nada)). Apenas descrevi um pouco meus pontos de vista. Você é livre para discordar.

 
Реter Konow:

Em princípio, é possível generalizar os tipos. Cheguei à conclusão de que nada de ruim acontecerá, se a grande maioria das propriedades dos objetos for do tipo int. Todos os outros (o dobro está praticamente ausente nas propriedades dos objetos gráficos) tipos abreviados que eu rejeitei por uma questão de simplificação. A memória "invadida" é tão insignificante que não faz sentido pensar sobre isso. Naturalmente, não podemos ir por tal sacrilégio em nome do profissionalismo))))). Mas estamos no século XXI e não estou ameaçado por fogueiras).

Eu fiz os nomes dos objetos como números, e os coloquei na série geral de propriedades dos objetos.

O único lugar onde eu precisava de um tipo diferente de dados era o dos parâmetros de controle. Aí criei um segundo núcleo, que armazena as propriedades dos parâmetros, e os próprios valores em cadeia do tipo, que posso facilmente reduzir a qualquer coisa (mais precisamente, ao que está escrito nas propriedades do parâmetro).

SUGESTÃO: Por "parâmetro do elemento de controle" entende-se o PARÂMETRO GERIDO pelo elemento de controle.

Acontece que a matriz global, que contém todos os controles e todas as suas propriedades, tem uma profundidade de dimensão igual à soma de todas as várias propriedades dos controles. Isto é, mesmo que algumas propriedades do controle não sejam necessárias, estas células ainda estarão nesta matriz, já que a matriz é sempre uniforme.

O que é surpreendente, no entanto, é a uniformidade da própria matriz. Neste sentido, o uso de uma estrutura é mais do que justificado, pois neste caso cada uma das propriedades pode ser descrita por seu próprio tipo, incluindo osindicato.

O uso de estruturas realmente simplifica o armazenamento de propriedades, você não precisa se limitar a um tipo ou desistir de nada. Não é preciso lidar com conversões de cordas para outros tipos de dados. Uma estrutura elimina todas essas limitações desde o início.

Além das propriedades e das próprias coordenadas, esta matriz global também deve armazenar o sistema de subordinação de elementos. Se o objeto de Legenda em nosso desenho mudou, os botões também devem ser redesenhados, pois eles estão localizados no campo de cabeçalho. Portanto, se algum controle "intermediário" mudou, tudo nele deve ser redesenhado. Peter, como você armazena a estrutura de dependência de objetos?
 
Алексей Барбашин:

Acontece que a matriz global, que contém todos os controles e todas as suas propriedades, tem uma profundidade de dimensão igual à soma de todas as diferentes propriedades dos controles. Isto é, mesmo que algumas propriedades não sejam necessárias para um elemento, estas células ainda estarão nesta matriz, porque a matriz é sempre uniforme.

O que é surpreendente, no entanto, é a uniformidade da própria matriz. Neste sentido, o uso de uma estrutura é mais do que justificado, pois neste caso cada uma das propriedades pode ser descrita por seu próprio tipo, incluindo osindicato.

O uso de estruturas realmente simplifica o armazenamento de propriedades, você não precisa se limitar a um tipo ou desistir de nada. Não é preciso lidar com conversões de cordas para outros tipos de dados. Uma estrutura elimina todas essas limitações desde o início.

O núcleo é a matriz. Ela contém todas as propriedades dos objetos.

Você pode escolher seu próprio método. Mas, ao longo dos anos de engano, cheguei à conclusão de que nenhum outro método dará um crescimento igualmente poderoso na funcionalidade de um sistema em evolução. A máxima simplicidade e eficiência é a perfeição.


 
Алексей Барбашин:

...Peter, como você armazena a estrutura de dependência de objetos?

Se você quer dizer dependências de coordenadas, também em kernel.

Eu tenho um manipulador especial para as dependências de objetos coordenados. Funciona com todos os tipos de dependências.
 
Roman:

E então, por que amarrar a interface ao gráfico?
Afinal, é possível recuperar diretamente quaisquer dados, os mesmos carimbos de tempo e preço, a partir das funções relevantes.

ao fato de que a interface do aplicativo (com o que o usuário opera) não está limitada a uma única janela.

Estamos falando de comércio, não estamos?

Bem, a colocação de elementos interativos na tabela (e sua ligação) é quase impossível de resolver por meios externos.

Mais uma vez, os diálogos/formulários externos são fáceis de desenhar. Mas dentro de uma carta, elementos sem as especificidades do terminal e a carta específica são quase impossíveis de serem desenhados.

 
Реter Konow:
O núcleo é a matriz. Ela contém todas as propriedades dos objetos.

Você pode escolher seu próprio método. Mas, ao longo dos anos de engano, cheguei à conclusão de que nenhum outro método dará um crescimento igualmente poderoso na funcionalidade de um sistema em evolução. A máxima simplicidade e eficiência é a perfeição.


A Matrix é um loop aninhado e os loops aninhados são o tempo. Imho, sem sarcasmo, apenas raciocinando logicamente.

 

Peter, você obtém o seguinte: o núcleo consiste em uma matriz global de propriedades de elementos, matriz global de valores de elementos, matriz global de dependências, matriz global de imagens...

Se for necessário acrescentar mais propriedades, então a dimensionalidade das matrizes é aumentada.

As propriedades são acessadas estritamente por índices porque as células não têm nomes.

Pelo menos os nomes dos campos podem ser acessados com uma estrutura.

Peter, você é... gigante...

Eu, por exemplo, vejo as coisas desta forma (simplificado):

class CControl : public CObject

{

public:

        int ПозицияХ;

        int ПозицияY;

        int Длина;

        int Ширина;

        color ЦветОсновы;

        color ЦветБордюра;

        int ТолщинаБордюра;

}

Uma "classe" de fato é um fio específico em seu conjunto global, apenas com uma cara mais "humana". As classes são projetadas para criar seus próprios objetos de dados, com um conjunto de propriedades compreensíveis que podem ser acessadas pelo nome em vez de por índice. Uma classe é apenas um construtor de tipo universal.

Assim, criamos um controle básico que contém as propriedades mais comuns, o que quase qualquer controle tem.

Você pode criar objetos especializados com base nisso:

class CButton : public CControl 

{

public:

        string Заголовок;

        int Image[];

}

Ou seja, cada tipo de controle subseqüente simplesmente complementa o tipo de base com as propriedades requeridas.

E como, como escrevi anteriormente, as propriedades básicas são armazenadas no controle básico, a travessia de "bater" o cursor no controle é feita verificando um tipo de dado: CControl. Tendo encontrado o objeto desejado, o programa tem acesso imediato às propriedades desse objeto, já que o ponto do programa já está no próprio objeto, assim como em seu loop o programa está na linha de matriz desejada.

Razão: