O que os profissionais têm a dizer: Como obter valores de rolagem do mouse na MQL? [relançamento do quinto fórum].
Antes de mais nada, seria uma boa idéia decidir de que forma as informações sobre a ocorrência do evento devem ser recebidas: direta ou indiretamente?
Assumindo que escrever sua própria DLL não é uma opção, por que não eliminar também a API? Se o método indireto for adequado:
Devemos fazer um loop de um script que verifique o índice da primeira barra visível em uma janela - WindowFirstVisibleBar (você pode fazê-lo junto com o número de barras na janela - WindowBarsPerChart). Se forem diferentes do valor anterior, o gráfico foi verificado. É verdade que, neste caso, não só a roda do mouse pode ser a causa (zoom no tempo - "+", "-", clicando em Home ou End, salto direto para a data desejada).
Em qualquer caso, ainda não há informações suficientes para saber exatamente o que é necessário para detectar um evento de giro da roda do mouse. Em seguida, você pode sugerir métodos.
P.S. E se você precisar de acesso à função de manipulação de janelas, é SetWindowLongPtr (ver msdn). Mas você não pode passar sem DLL aqui, porque não pode atribuir um novo procedimento de processamento de mensagens localizado em código MQL.
Em qualquer caso, ainda não há informações suficientes para saber exatamente o que é necessário para a detecção do evento de giro da roda do mouse. Então, métodos podem ser sugeridos.
o que exatamente é necessário?
a lista, é claro. o que mais? :)
Pode ajudar.
Não. Não sei como obter o endereço da função na MQL.
Eu o fiz:
- o usuário clica para fechar a janela MT
- Eu pergunto: você mudou o indicador - salvar? Sim Não Cancelar
Quando você cancela, ninguém vai a lugar algum.
Sim-save e sai, não-save e sai.
É primitivo.
Os ganchos não têm nada a ver com isso, na verdade.
> Estamos falando de DLLs do Windows. Escrever o seu próprio ainda não é considerado.
Boa sorte...
A janela do terminal deve ter um procedimento personalizado de tratamento de eventos com interceptação - é só isso.
você quer dizer SetWindowLong ?
o que exatamente é necessário?
a lista girando, é claro. o que mais? :)
Se a lista (CListCtrl) é seu próprio objeto, qual é o problema? É a lista que recebe os eventos do mouse, não a janela do Meta Trader.
Ou estamos falando de uma lista baseada em objetos gráficos MT4?
Se a lista (CListCtrl) é seu próprio objeto, qual é o problema? É a lista que recebe eventos do mouse, não a janela do Meta Trader.
Ou estamos falando de uma lista baseada em objetos gráficos MT4?
Se não houver problema, favor especificar como determinar o FATO do deslocamento da roda do mouse. Quando um ponteiro do mouse está na janela do MT4. É muito interessante :)
É claro - por meio do Windows.
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Depois de navegar na rede, decidi sobre três possibilidades:
Manuseio de WM_MOUSEWHEEL 1.
Processamento de WM_INPUT. 2.
3. Recebendo dados do mouse do DirectInput.
O primeiro caso assume que existe uma janela onde este evento é tratado. Infelizmente eu não sei como chegar à fila de mensagens da janela do terminal da MQL, portanto esta variante caiu fora. http://www.rsdn.ru/article/baseserv/hookdll.xml
A segunda variante também implica em uma janela, mas eu esperava que ao chamar a função GetRawInputBuffer eu pudesse receber dados sem passar pelo terminal.
Consegui utilizar todas as funções de registro e recuperação. Nomeadamente:
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices
Mas a função GetRawInputBuffer que eu estava procurando não funcionou. O buffer está vazio e nenhum dado é capturado nele.
Infelizmente, também falhei com a terceira opção, porque não sei como obter uma instância da interface LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8.
Especialistas, qual é o seu conselho?