O que os profissionais têm a dizer: Como obter valores de rolagem do mouse na MQL? [relançamento do quinto fórum].

 
Estamos falando da DLL do Windows. Escrever o seu próprio ainda não é considerado.


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?


Eu me associo à pergunta.
 

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.

 

A idéia de controlar o gráfico de rolagem, foi. Mas não comilfo....

Não, você precisa definir um evento com roda de rolagem.

 
Scriptong:

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? :)

 

Não. Não sei como obter o endereço da função na MQL.
 
Para a janela do terminal pendurar um procedimento personalizado de processamento de eventos com interceptação - e é isso.
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...
 
jartmailru:
A janela do terminal deve ter um procedimento personalizado de tratamento de eventos com interceptação - é só isso.

Você quer dizer SetWindowLong?
 
sergeev:
você quer dizer SetWindowLong ?
Sim.
 
sergeev:

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?

 
Scriptong:


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.