WebBrowser OnMouseMove impossible
Bonjour.
J'utilise un Twebbrowser pour afficher une page de geoportail. Je voudrais déplacer la carte de façon précise et automatique. Pour ceci je pensais simuler le déplacement de la souris (send message) mais il semble que ce soit impossible. Qui a une piste ?
Merci.
Une partie de la solution?
Voilà ce que j'ai écrit :
Position = les coordonnées écran de mon Webbrowser (Tpoint)
j = la longueur de mon déplacement (plus petit que la largeur du Webbrowser)
Pour déplacer de gauche à droite en réponse a un bouton:
Code:
1 2 3 4 5 6 7
| SetCursorPos(position.X,position.y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
for i:=position1.X to position1.X+j do
begin
SetCursorPos(i,position1.y);
end;
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); |
j'ai essayé sans succès mouse_event(MOUSEEVENTF_MOVE,j,0,0,0) à la place de la boucle
Réaction différente selon le site
Bonjour.
Je pensais le problème résolu mais jusqu'ici la page "géoportail" que j'ouvrais avec le webbrowser était une page personnelle (http://chateau.branlant.free.fr/copi...cementv20.html).
En utilisant le site de géoportail (https://www.geoportail.gouv.fr/) il est impossible de déplacer une carte avec la souris et donc impossible d'utiliser "mouse_event(MOUSEEVENTF_MOVE)".
Quelqu'un a une piste ?
Merci pour cet éclairage.
Citation:
Envoyé par
Andnotor
Essaye déjà de remplacer
webbrowser1.Handle par
GetForegroundWindow.
Ensuite, ces nombres écrits ainsi 7864320, 32049148 ne sont pas très parlants. En héxa ce serait déjà un peu mieux : $00780000, $01E907FC.
Soit pour :
wParam : $0078 = 120 = un WHEEL_DELTA et $0000 pour aucun bouton enfoncé ;
lParam : y = $01E9 = 489px, x = $07FC = 2044px.
Une façon plus propre d'écrire cela est de passer par la construction des paramètres :
Code:
1 2 3
| X := 2044;
Y := 489;
SendMessage(GetForegroundWindow, WM_MOUSEWHEEL, MakeWParam(0, WHEEL_DELTA), MakeLParam(X, Y)); |
Maintenant, il faut savoir que même si ce message est bien envoyé au bon contrôle fenêtré (ce qui n'est pas encore sûr), il faut
obligatoirement que le curseur soit positionné sur ce composant (que X et Y soient corrects). Si la position 2044/489 n'est pas dans la zone de l'élément scrollable/zoomable ça ne fonctionne pas.
lParam n'est en aucun cas une constante.
Il serait à nouveau plus simple de simuler cette molette par
Mouse_Event(MOUSEEVENTF_WHEEL) et laisser l'OS déterminer la fenêtre cible lui-même.
Votre réponse me permet de mieux comprendre ces paramètres, mais malheureusement ce n'est pas le sujet principal.
Mon souci est l'impossibilité de déplacer une carte en ouvrant géoportail dans mon application.
Le sendmessage n'a été écris que pour vérifier que j'arrivais bien a envoyer un message sur le webbrowser (comme le site réagit à la molette j'ai utilisé cet événement).
Je me suis alors rendu compte que webbrowser1.Handle n'était pas le bon paramètre. Mais tout cela n'explique pas pourquoi geoportail ouvert par un webbrowser interagi avec la molette mais pas a un déplacement de la souris.