IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

WebBrowser OnMouseMove impossible


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 38
    Par défaut 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.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 38
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tu peux pas jouer avec les positions des scrollbars ?

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 38
    Par défaut
    Citation Envoyé par retwas Voir le message
    Tu peux pas jouer avec les positions des scrollbars ?
    Merci pour cette réponse mais la page s'ouvre sans scrollbars.

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 930
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 930
    Par défaut
    C'est bien avec mouse_event(MOUSEEVENTF_MOVE) qu'il faut notifier le mouvement. Il n'y a pas de message souris avec SetCursorPos. Attention cependant, le mouvement réel en relatif dépend aussi de l’accélération de la souris définie au niveau OS. Pour de la précision, il faut passer par des coordonnées absolues mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE) et calculer la position en mickey et non en pixel.

    Pour un mouvement de 100px :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, (Mouse.CursorPos.X +100) *65535 div screen.Width, Mouse.CursorPos.Y *65535 div screen.Height, 0, 0);
    En mickey, la position 0/0 correspond au coin supérieur gauche de l'écran principal et 65535/65535 au coin inférieur droit. Dans un environnement multi-moniteur, il faut encore spécifier MOUSEEVENTF_VIRTUALDESK pour que la position 0/0 corresponde au coin supérieur gauche du bureau et évidemment 65535/65535 à son coin inférieur droit.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 38
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    C'est bien avec mouse_event(MOUSEEVENTF_MOVE) qu'il faut notifier le mouvement. Il n'y a pas de message souris avec SetCursorPos. Attention cependant, le mouvement réel en relatif dépend aussi de l’accélération de la souris définie au niveau OS. Pour de la précision, il faut passer par des coordonnées absolues mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE) et calculer la position en mickey et non en pixel.

    Pour un mouvement de 100px :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, (Mouse.CursorPos.X +100) *65535 div screen.Width, Mouse.CursorPos.Y *65535 div screen.Height, 0, 0);
    En mickey, la position 0/0 correspond au coin supérieur gauche de l'écran principal et 65535/65535 au coin inférieur droit. Dans un environnement multi-moniteur, il faut encore spécifier MOUSEEVENTF_VIRTUALDESK pour que la position 0/0 corresponde au coin supérieur gauche du bureau et évidemment 65535/65535 à son coin inférieur droit.
    Merci, maintenant ça marche avec : Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE...
    J'utilise deux écran et j'ai donc essayé MOUSEEVENTF_VIRTUALDESK j'ai alors une erreur à la compilation (identificateur non déclaré). Cependant les deux écrans ne semblent pas poser de problèmes. J'ajoute qu'il ne faut oublier de mettre le focus sur le webbrowser (mon bouton de commande est sur une autre form).

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 930
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 930
    Par défaut
    Citation Envoyé par bauschr Voir le message
    J'utilise deux écran et j'ai donc essayé MOUSEEVENTF_VIRTUALDESK j'ai alors une erreur à la compilation (identificateur non déclaré).
    const MOUSEEVENTF_VIRTUALDESK = $4000;

    Citation Envoyé par bauschr Voir le message
    Cependant les deux écrans ne semblent pas poser de problèmes.
    Ca ne pose pas de problème tant que le déplacement est inférieur ou égal à 65535 mickeys

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 38
    Par défaut 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 ?

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 277
    Par défaut
    Citation Envoyé par bauschr Voir le message
    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 autre piste : ne serait-il pas plus logique d'utiliser l'API Geoportail :
    http://api.ign.fr/accueil
    qui permet justement de déplacer la carte, zoomer etc.

    Reste à piloter cette api conçue pour être utilisée en Javascript ou en Java à partir d'un site, en utilisant les composants idoines....
    Voir aussi peut-être TMapView avec Google Maps et
    http://api.ign.fr/jsp/site/Portal.js...&dossier_id=74

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 38
    Par défaut Api géoportail
    Merci pour la réponse.
    La page qui fonctionne et que je cite utilise l'API de géoportail avec 4 boutons qui commandent le déplacement. Mais je souhaite écrire une application qui fonctionne dans tous les cas de figure (avec un autre site par exemple). Il semble qu'il faut passer par "webbrowser.document" mais là je bloque.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 277
    Par défaut
    Citation Envoyé par bauschr Voir le message
    Merci pour la réponse.
    La page qui fonctionne et que je cite utilise l'API de géoportail avec 4 boutons qui commandent le déplacement. Mais je souhaite écrire une application qui fonctionne dans tous les cas de figure (avec un autre site par exemple). Il semble qu'il faut passer par "webbrowser.document" mais là je bloque.
    Le temps me manque pour approfondir la question.
    Vous avez exploré ce qu'il est possible de faire avec la méthode TWebBrowser.EvaluateJavaScript ?

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 38
    Par défaut Toujours pas de solution
    Citation Envoyé par yvslms Voir le message
    Le temps me manque pour approfondir la question.
    Vous avez exploré ce qu'il est possible de faire avec la méthode TWebBrowser.EvaluateJavaScript ?
    Cette méthode n'est pas présente sur ma version (delphi 7, windows 10).

    J'ai le même résultat avec un OLEContainer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    adresse : string
     
    olecontainer1.CreateObject('Shell.Explorer',false);
    olecontainer1.DoVerb(-1);
    olecontainer1.OleObject.navigate2(adresse);
    Si j'ouvre ma page personnelle sur géoportail (http://chateau.branlant.free.fr/copi...cementv20.html) aucun problème.
    Si j'ouvre géoportail (https://www.geoportail.gouv.fr/carte/) impossible de déplacer la carte avec la souris.
    Je continue donc a chercher ...

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 277
    Par défaut
    Citation Envoyé par bauschr Voir le message
    ....
    Cette méthode n'est pas présente sur ma version (delphi 7, windows 10).
    ....
    Vous pouvez aussi télécharger la dernière version de Delphi gratuitement ("Starter" pour Win32 uniquement).
    Pour le reste tenez nous au courant, perso le sujet m'intéresse.
    J'ai vu aussi que l'IGN venait de sortir une nouvelle version de son SDK.
    Je tâcherai de m'y pencher dès que j'aurai un moment.

    Bon courage.

Discussions similaires

  1. [ArchiveBuilder][JavaMail] exécution impossible...
    Par Gorthal dans le forum JBuilder
    Réponses: 7
    Dernier message: 10/01/2003, 09h12
  2. Réponses: 8
    Dernier message: 20/11/2002, 11h50
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Webbrowser : Comment ne pas prendre la page en cache
    Par cedm78 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 30/08/2002, 11h17
  5. Détections avec WebBrowser
    Par Wazo_Sportive dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2002, 19h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo