Isso é possível? - página 8

 
Vitaly Muzichenko #:

Em algum lugar do fórum um código de trabalho completo em mql4 e mql5

Escreveu-o há cerca de um ano.

Em que linha, ou como você busca?

 
Andrey Sokolov #:

Em que tópico, ou como você pesquisa?

Aqui está a grande questão com a busca primitiva do site, caso contrário eu mesmo a teria encontrado.

 
Provavelmente este aqui?
 
Vasiliy Pushkaryov #:
Acho que é isso?

Obrigado

 
Andrey Sokolov #:

Obrigado

Há uma versão revisada e a fonte no último post deste tópico
 
Andrey Sokolov #:

Olá, você poderia me mostrar como você fez?

Emitir os dados da matriz para as etiquetas na área do cliente da barra de rolagem em um offset igual ao offset desta barra de rolagem. Você pode usar CScrollV da biblioteca padrão como a Barra de Rolagem. Array - uma lista com todos os itens. Rótulos - área para exibir itens da lista. O que é tão complicado lá...? Se desejar, qualquer programador que esteja familiarizado com o OOP pode fazer isso.

 
Mihail Matkovskij #:

Emitir os dados da matriz para as etiquetas na área do cliente da barra de rolagem em um offset igual ao offset desta barra de rolagem. Você pode usar o CScrollV da biblioteca padrão como a barra de rolagem. Array - uma lista com todos os itens. Rótulos - área para exibir itens da lista. O que é tão complicado lá...? Se desejar, qualquer programador, que esteja familiarizado com o OOP, pode fazê-lo.

Você já lidou com a rolagem da SB? De alguma forma eu não conseguiria fazê-lo trabalhar separadamente no gráfico, sem o painel do cliente. Se eu tivesse uma pergunta, poderia perguntar como fazê-la funcionar em tempo real.

Fórum sobre comércio, sistemas automatizados de comércio e testador de estratégias

Como criar um painel gráfico de qualquer complexidade e como ele funciona".

Vasiliy Pushkaryov, 2021.12.21 10:12

Estou tentando criar uma barra de rolagem vertical sem nenhuma ligação com o painel, apenas na tabela, mas ela não funciona.

Por exemplo, com a caixa de seleção, este código dá reação com um clique do mouse. A caixa de seleção aparece e desaparece.

#include <Controls\CheckBox.mqh>
CCheckBox Chbox;
//+------------------------------------------------------------------+
void OnInit()
{
  Chbox.Create(0, "MyCheckBox", 0, 20, 20, 100, 40);
  ChartRedraw();
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
  Chbox.OnEvent(id, lparam, dparam, sparam);
}
//+------------------------------------------------------------------+


Mas com deslocamento vertical - sem reação a cliques do mouse.

#include <Controls\Scrolls.mqh>
CScrollV Scroll;

void OnInit()
{
  Scroll.Create(0, "MyScrollV", 0, 20, 20, 40, 200);
  ChartRedraw();
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
  Scroll.OnEvent(id, lparam, dparam, sparam);
}
//+------------------------------------------------------------------+

Por favor, quem sabe como fazer este elemento combinado funcionar no gráfico?


 
Vasiliy Pushkaryov #:

Você já lidou com a rolagem da SB? Por alguma razão, não consegui que funcionasse separadamente no gráfico, sem o painel do cliente. Talvez você possa ajudar?


Há muitas nuances aí. A caixa de seleção funciona (visualmente) porque é OBJ_BITMAP_LABEL, e seu Estado é alterado pelo terminal. Seu clique pode ser rastreado como o clique de qualquer etiqueta Bitmap no OnChartEvent. Mas a biblioteca padrão tem seu próprio modelo de evento baseado em eventos personalizados. Eles são gerados no CAppDialog vazio::ChartEvent enumerando o CArrayObj CWndContainer::m_controla se o componente CScrollV foi adicionado aoCAppDialog. Em seguida, eventos como ON_CLICK, ON_DRAG_START, ON_DRAG_PROCESS e ON_DRAG_ENDsão gerados. No seu caso, não foram adicionados componentes ao CAppDialog, portanto, nenhum evento é gerado. Como contornar este mecanismo e forçar a geração de eventos personalizados sem CAppDialog que eu ainda não pensei. Preciso analisar o código fonte com mais detalhes.

Você pode tentar criar um componente baseado na classe CWndContainer. E acrescente elementos a ela. Não há elementos visuais (como no CDialog e CAppDialog), mas todos os mecanismos necessários para o correto funcionamento dos elementos de IU estão presentes.
 
Mihail Matkovskij #:

Há muitas nuances aí. O tick OnCheckBox funciona (visualmente) porque é OBJ_BITMAP_LABEL, e seu Estado é alterado pelo terminal. Seu clique pode ser rastreado conforme qualquer etiqueta Bitmap clica no OnChartEvent. Mas a biblioteca padrão tem seu próprio modelo de evento baseado em eventos personalizados. Eles são gerados no CAppDialog vazio::ChartEvent enumerando o CArrayObj CWndContainer::m_controla se o componente CScrollV foi adicionado aoCAppDialog. Em seguida, eventos como ON_CLICK, ON_DRAG_START, ON_DRAG_PROCESS e ON_DRAG_ENDsão gerados. No seu caso, não foram adicionados componentes ao CAppDialog, portanto, nenhum evento é gerado. Como contornar este mecanismo e forçar a geração de eventos personalizados sem CAppDialog que eu ainda não pensei. Preciso analisar o código fonte com mais detalhes.

Você pode tentar criar um componente baseado na classe CWndContainer. E acrescente elementos a ela. Não há elementos visuais (como no CDialog e CAppDialog), mas todos os mecanismos necessários para o correto funcionamento dos elementos de IU estão presentes.
Obrigado por descrever os mecanismos do CAppDialog e por sugerir a sua colocação em um recipiente. Quando eu tiver mais tempo, tentarei experimentar.