L'avis des professionnels : Comment obtenir les valeurs de défilement de la souris dans MQL ? [repost du cinquième forum].
Tout d'abord, il serait bon de décider sous quelle forme l'information sur la survenance d'un événement doit être reçue : directement ou indirectement ?
En supposant que l'écriture de votre propre DLL ne soit pas une option, pourquoi ne pas supprimer également l'API ? Si la méthode indirecte convient :
Nous devrions boucler un script qui vérifie l'indice de la première barre visible dans une fenêtre - WindowFirstVisibleBar (vous pouvez le faire en même temps que le nombre de barres dans la fenêtre - WindowBarsPerChart). Si elles diffèrent de la valeur précédente, la carte a été vérifiée. Il est vrai que dans ce cas, la molette de la souris n'est pas la seule cause (zoomer dans le temps - "+", "-", cliquer sur Début ou Fin, saut direct à la date souhaitée).
Dans tous les cas, il n'y a pas encore assez d'informations pour savoir ce qu'il faut faire exactement pour détecter un événement de rotation de la molette de la souris. Vous pouvez ensuite proposer des méthodes.
P.S. Et si vous avez besoin d'accéder à la fonction de gestion des fenêtres, c'est SetWindowLongPtr (voir msdn). Mais vous ne pouvez pas vous passer de DLL ici, car vous ne pouvez pas attribuer une nouvelle procédure de traitement des messages située dans le code MQL.
L'idée de contrôler le graphique défilant, c'était. Mais pas comilfo....
Non, vous devez définir un événement de roue de défilement.
Quoi qu'il en soit, il n'y a pas encore assez d'informations pour savoir exactement ce que l'on attend de la détection de l'événement de rotation de la molette de la souris. Ensuite, des méthodes peuvent être proposées.
qu'est-ce qui est requis exactement ?
la liste bien sûr. quoi d'autre ? :)
Ça pourrait aider.
Non. C'est un hook. Je ne sais pas comment obtenir l'adresse de la fonction dans MQL.
J'ai procédé ainsi :
- l'utilisateur clique pour fermer la fenêtre MT
- je demande : avez-vous modifié l'indicateur - sauvegardez ? Oui Non Annuler
Lorsque vous annulez, personne ne va nulle part.
Oui-sauvegarde et sortie, non-sauvegarde et sortie.
Primitif.
Les crochets n'ont rien à voir avec ça, vraiment.
> Nous parlons des DLL de Windows. La rédaction de votre propre texte n'est pas encore envisagée.
Bonne chance...
La fenêtre du terminal doit avoir une procédure de traitement des événements personnalisée avec interception - c'est tout.
Vous voulez dire SetWindowLong ?
qu'est-ce qui est requis exactement ?
le filage de liste bien sûr. quoi d'autre ? :)
Si la liste (CListCtrl) est son propre objet, quel est le problème ? C'est la liste qui reçoit les événements de la souris, pas la fenêtre Meta Trader.
Ou s'agit-il d'une liste basée sur les objets graphiques de MT4 ?
Si la liste (CListCtrl) est son propre objet, quel est le problème ? C'est la liste qui reçoit les événements de la souris, pas la fenêtre du Meta Trader.
Ou s'agit-il d'une liste basée sur les objets graphiques de MT4 ?
S'il n'y a pas de problème, veuillez préciser comment déterminer le FACT du déplacement de la molette de la souris. Lorsqu'un pointeur de souris se trouve dans la fenêtre MT4. C'est très intéressant :)
Bien sûr - au moyen de Windows.
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Après avoir surfé sur le net, je me suis décidé pour trois possibilités :
Manipulation de WM_MOUSEWHEEL 1.
Traitement de WM_INPUT. 2.
3. Réception des données de la souris depuis DirectInput.
La première option suggère d'avoir une fenêtre où cet événement est traité. Malheureusement je ne sais pas comment accéder à la file d'attente des messages de la fenêtre du terminal à partir de MQL, donc cette variante est tombée à l'eau. http://www.rsdn.ru/article/baseserv/hookdll.xml
La deuxième variante implique également une fenêtre, mais j'espérais qu'en appelant la fonction GetRawInputBuffer, je serais en mesure de recevoir des données sans passer par le terminal.
J'ai pu utiliser toutes les fonctions d'enregistrement et de récupération. À savoir :
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices
Mais la fonction GetRawInputBuffer que je cherchais n'a pas fonctionné. Le tampon est vide et aucune donnée n'y est capturée.
Malheureusement, j'ai également échoué avec la troisième option, car je ne sais pas comment obtenir une instance de l'interface LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8.
Experts, quel est votre conseil ?