Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
...
mas se você sabe como funciona o modelo do evento no Windows e tem experiência de trabalhar com compiladores com designers de formulários, então tudo é o mesmo em todos os lugares
ZS: é a terceira vez que vejo Sharp, mas tive uma grande experiência com Delphi, não vejo a diferença, tudo funciona da mesma maneira, o que não funciona, é pesquisado no Google da primeira vez.
Não me lembro como funciona o modelo do evento Windows. E têm experiência com compiladores e designers há muito tempo.
Eu preciso conectar um formulário criado a uma aplicação MT e resolver o problema. Você disse que era fácil.
Não mostrando-o, mas descrevendo seus princípios de forma bem clara. É a isso que eles se opõem, é o que eles dizem: "a estrada está errada".
Além disso, é "errado", não para o autor, mas para aqueles que se opõem. Eles têm cérebros de galinha e não conseguem lembrar onde e que objetos criaram, onde e quem se refere a eles, o que cada célula da matriz significa, de onde podem ser mudados e onde não podem... É compreensível que os oponentes estejam indignados. Em vez de treinar sua memória, para que pudessem facilmente memorizar alguns milhares de objetos e referências no programa, pessoas tolas cortam seus próprios direitos de acesso, definem algumas distinções, algumas interfaces, algumas funções polimórficas... Eles se torturam, como sob o regime czarista, eh...
Abandone o absurdo sobre a frieza da memória. Às vezes se observa que o fio deste diálogo do fórum não é rastreado até a profundidade de duas páginas. Além disso, há muita negação, para que a memória funcione tão maravilhosamente, como eles tentam nos dizer.
Ajude-me a resolver um problema.
O formulário Windows está lá. Ele começa e funciona. Botões e caixas de seleção podem ser clicados.
Agora é preciso uma DLL para se conectar ao MT5. Quem sabe como fazer isso?
Ajude-me a resolver um problema.
2. Ontem Igor mostrou um exemplo. Ele mostra como no Expert Advisor você pode chamar o método de uma classe, contido na dll importada. Ou seja, você precisa escrever uma função (método) em c# que muda o estado da caixa de seleção. Como mudar a propriedade da caixa de seleção, não me lembro do nome do método, é fácil navegar pela lista suspensa, você tem que digitar o nome da caixa de seleção, pressionar um ponto...
1. Eu não sei. Provavelmente não. Você tem que chamar uma função dll a partir do temporizador e olhar o estado das caixas de seleção. E, quanto a eventos como o aperto de botões, provavelmente poderíamos criar uma matriz e armazenar eventos nela. Mas não é difícil, considerando a vantagem de trabalhar com controles visualmente.
C#. instalado. Abriu um projeto. Fez um formulário e lhe acrescentou dois botões e três caixas de seleção.
Aqui está o código no editor:
Pergunta: Por que existe uma função para um botão e onde estão as funções para o segundo botão e as caixas de seleção?
Encontrei este código:
Como utilizá-lo para fazer a interface com o MT5?
Você precisa demonstrar que o segundo botão é necessário - faça um duplo clique sobre ele, e então o código será aberto e a função será adicionada. O projeto será compilado com um erro se o botão for então removido do formulário, o código deve ser apagado manualmente de algum arquivo, mas não aquele que você escreveu.
2. Ontem, Igor mostrou um exemplo. O exemplo mostra como um Expert Advisor pode chamar um método de uma classe na dll importada. Ou seja, você precisa escrever uma função (método) em c# que muda o estado da caixa de seleção. Como mudar a propriedade da caixa de seleção, não me lembro do nome do método, é fácil navegar pela lista suspensa, você tem que digitar o nome da caixa de seleção, pressionar um ponto...
1. Eu não sei. Provavelmente não. Você tem que chamar uma função dll a partir do temporizador e olhar o estado das caixas de seleção. E, quanto a eventos como o aperto de botões, provavelmente poderíamos criar uma matriz e armazenar eventos nela. Mas não é difícil, considerando a vantagem do manuseio visual dos controles.
Ok.
Portanto, precisamos fazê-lo:
E se houver centenas de elementos?
Como organizar a memória compartilhada?
E se for necessário mudar não apenas o estado dos elementos pressionados/liberados em uma forma, mas também sua cor (por exemplo, para botões)?
E se você precisar alterar o texto nos campos de entrada em um formulário programático do MT5?
Quanto a eventos como a prensa de botões, provavelmente é melhor fazer uma matriz e armazenar os eventos nela contidos. Mas não é difícil, considerando a vantagem do trabalho visual com controles.
Eu costumava fazer isso de uma maneira mais simples:
O usuário pressionou o botão no formulário - o manipulador de eventos OnClick() foi clicado e o Botão1.Disable foi criado;
2. depois é até MT5 como a troca será organizada lá, eu gosto de cliques de botão para ser interrogado em OnTick() - você não fará nada até que não haja nenhum tick; você pode definir um valor neutro de cerca de 300 ms no timer - nem um usuário notará um frizz, nem MT5 irá diminuir a velocidade
Mas o ponto do meu exemplo é que a visualização do painel no MT5 agora é possível em 2 cliques, os manipuladores de botões trabalham em uma .dll e parte do script de interface pode ser transferida para um formulário, as mesmas tabelas, manipulação de dados... tudo
o mais valioso é economizar tempo no desenvolvimento da renderização, com a ajuda do designer de formulários tudo é feito em horas ;)
Rehtag Konow:
Criar uma memória compartilhada em DLL. Assim, ao acessar a partir do MT5, a bandeira de mudança de estado dos botões e caixas de seleção será definida. O aplicativo acessa memória compartilhada, lê bandeiras e sabe que o estado de um ou outro elemento da forma deve ser alterado.
Escreva referência cíclica à DLL do cronômetro em MT5 para ler bandeiras de chamadas de função ou inserir texto nos campos.
E se houver centenas de elementos?
Como organizar a memória compartilhada?
Você está indo na direção errada novamente, saia da feria de 2000! .... embora de alguma forma eu ache que 2000 não é o limite para você ))))
sem ofensa, espero eu?
Eu costumava fazer isso de uma maneira mais simples:
1. o usuário pressionou o botão no formulário - imediatamente entrou OnClick() handler, fez Button1.Disable lá;
2. depois é até MT5 como a troca será organizada; eu gosto que cliques de botão sejam interrogados em OnTick() - de qualquer forma, até que um tick não seja alcançado, você pode definir um valor neutro de cerca de 300 ms no timer - nem um usuário notará um frizz, nem MT5 irá diminuir a velocidade
Mas o ponto do meu exemplo é que a visualização do painel no MT5 agora é possível em 2 cliques, os manipuladores de botões trabalham em uma .dll e parte do script de interface pode ser transferida para um formulário, as mesmas tabelas, manipulação de dados... tudo
a melhor parte é economizar tempo na renderização, com o Designer de Formulários tudo é feito em horas ;)
Você está indo na direção errada novamente, saia da feria dos 2000s! .... embora eu ache que os 2000s não são o limite para você ))))
Sem ressentimentos, espero eu?
Sem ofensa, mas é uma pena que não esteja no ponto.
Você está pegando o exemplo NEAREST e extrapolando a partir dele, acreditando que a complexidade não vai aumentar. Isto é um erro.
Mesmo o exemplo mais simples que você deu está errado. Porque além da forma criada, você também precisa criar uma DLL. E depois criar uma memória TOTAL dentro da DLL.
medida que o número de elementos da forma cresce e a funcionalidade do programa no MT5 se torna mais complexa, esta interação se torna CLEALMENTE ocupada e complicada.
Eu testei tudo isso na prática.
OK.
Portanto, é necessário:
E se houver centenas de elementos?
Como organizar a memória compartilhada?
E se for necessário mudar não apenas o estado dos elementos pressionados/liberados em uma forma, mas também sua cor (por exemplo, para botões)?
E se precisarmos alterar o texto nos campos de entrada de um formulário de forma programática a partir de МТ5?
Se os eventos forem tratados corretamente, então o número de controles não é um problema. Na dll, podemos criar uma matriz ou duas matrizes, uma para o nome do objeto e a segunda para o tipo de evento. Na dll escreva uma função com dois parâmetros, também nome e tipo do evento. A partir de cada responsável pelo evento desejado, chame esta função, para que os eventos sejam colocados em matrizes. Outro método - para rastrear eventos a partir do temporizador EA, tão conveniente ou conforme se revelar - as mesmas matrizes por referência ou o que quer que seja e também uma variável - com o número de eventos na matriz. Após a chamada desse método, as matrizes são desobstruídas.
Ou talvez seja mais fácil criar um array com um array; há um objeto de evento em c#, para que eu possa transformá-los em um array. Além disso, talvez seja possível, de alguma forma, brincar e não chamar uma função de cada participante do evento por si só. Mas isso não importa; em qualquer caso é uma bagatela em comparação com as capacidades de interface e toda a potência do c#.