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

Caml Discussion :

[LablGtk2 + Caml] Récupérer les coordonnées souris


Sujet :

Caml

  1. #1
    Invité
    Invité(e)
    Par défaut [LablGtk2 + Caml] Récupérer les coordonnées souris
    Bonjour à tous,
    je suis actuellement sur un projet développé en Caml et faisant appel à plusieurs bibliothèques telles que Ocaml-LablGtk2 et Ocaml-SDL.
    Mais je suis face à certain problème, je ne sais pas comment récupérer les coordonnées de l'endroit où l'utilisateur du logiciel a cliqué à l'intérieur d'une certaine "box",
    et du coup comment définir un repère commençant en (0,0) et correspondant au coin supérieur gauche de cette même "box".
    Merci de bien vouloir m'aider.


    J'ai pendant ce temps vu qu'il fallait placer une "GBin.event_box" à l'intérieur d'une "box" et préciser les événements à détecter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    let event_box = GBin.event_box ~packing:maBox#add () in
    event_box#event#add [`BUTTON_PRESS];
    ...
    Dernière modification par Invité ; 14/04/2014 à 23h17.

  2. #2
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Généralement pour ce faire on créer un GMisc.drawing_area.
    L'interception des clicks de souris se fait à l'aide des événements `BUTTON_PRESS & `BUTTON_RELEASE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	drawing#set_foreground `WHITE;
    	area#event#add [`BUTTON_PRESS;`BUTTON_RELEASE];
    	let _ = area#event#connect#button_press ~callback:pressed
    	and _ = area#event#connect#button_release ~callback:released
            ...
    Un exemple de gestionnaire d'événement `BUTTON_PRESS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let pressed t =
    	m_b := GdkEvent.Button.button t;
    	m_xa := truncate (GdkEvent.Button.x t);
    	m_ya := truncate (GdkEvent.Button.y t);
    	false
    À voir également à propos de GMisc.drawing_area : des liens par cacophrène.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    et merci pour l'aide, j'ai réussi à récupérer les coordonnées souris dans une "GBin.event_box" selon votre méthode,
    mais malheureusement je me rend compte que c'est la deuxième partie de ma question qui pose souci.
    L'histoire du repère (0,0), coin supérieur gauche de ma "GBin.event_box"... Il ne correspond pas du tout au coin supérieur gauche de l'image que j'affiche (gros décalage)!
    Je m'explique, j'aimerais (en fait) savoir où l'utilisateur clique sur une image attachée à une "scrollbar",
    elle-même située à l'intérieur de ma fameuse "GBin.event_box".

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    (* Source: https://github.com/Pro-shooter/ePicsEditor *)
     
    ...
     
    let hboxMain = GPack.hbox
      ~spacing:0
      ~border_width:0
      ~width:1000
      ~height:750
      ~packing:vboxMain#add ()
     
    let vboxImg = GPack.vbox
      ~spacing:0
      ~border_width:0
      ~width:500
      ~packing:hboxMain#add ()
     
    let event_box_img =
      let event_box = GBin.event_box ~packing:vboxImg#add () in
      event_box#event#add [`BUTTON_PRESS]
      event_box#event#connect#button_press ~callback:(fun t ->
        x := truncate (GdkEvent.Button.x t);
        y := truncate (GdkEvent.Button.y t);
        false);
      event_box
     
    let scrollImg = GBin.scrolled_window
      ~hpolicy: `ALWAYS
      ~vpolicy: `ALWAYS
      ~packing:event_box_img#add ()
     
    let img = 
      let image = GMisc.image
        ~file:"monImage.png"
        ~packing:scrollImg#add_with_viewport () in image
     
    ...
    Dernière modification par Invité ; 15/04/2014 à 00h36.

  4. #4
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Il est possible qu'il faille GMisc.imageGBin.event_boxGBin.scrolled_window plutôt que GMisc.imageGBin.scrolled_windowGBin.event_box.

    Cependant, n'ayant moi-même pas expérimenté ce genre de chose, je suis bien incapable de garantir la pertinence du résultat.
    En cas d'échec il faudra attendre l'avis d'une personne plus expérimentée ou bien à défaut soumettre la question dans un forum plus spécifique.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'essaye ça tout de suite...

    EDIT: Wow! Ça à l'air de bien fonctionner, encore merci.
    Petite question, existe-t-il un moyen de changer temporairement l'apparence du curseur de la souris (toujours avec LablGtk2) ?
    Je suis tombé sur ceci http://oandrieu.nerim.net/ocaml/labl.../type_Gdk.html ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    type input_source = [ `CURSOR | `ERASER | `MOUSE | `PEN ]
    Dernière modification par Invité ; 15/04/2014 à 20h15.

  6. #6
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Le module Gdk.Cursor contient des curseurs prédéfinis ainsi qu'une fonction pour créer un curseur à partir d'un objet image.

    Il ne te manque plus qu'à trouver la fonction pour modifier le curseur
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Un "destroy" de curseur de souris puis une "création" ? http://oandrieu.nerim.net/ocaml/labl...dk.Cursor.html
    Mais je vois pas trop comment faire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GdkCursor.destroy (*Récupérer le curseur actuel ?*);
    let new_cursor = GdkCursor.create [`MON_CURSOR_TYPE] in
    ...

  8. #8
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Je te laisse trouver par toi-même la meilleure façon de faire (la plus concise/la plus POO).

    En tout cas ça a l'air faisable :
    • img#image te permet d'extraire la Gdk.window
    • set_cursor te permet d'en changer le pointeur de souris


    Edit: d'après cette page il faudrait modifier le curseur après window#show.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci pour l'aide, je mets ce topic en "Résolu" concernant ma première question.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/05/2012, 12h52
  2. Récupérer les coordonnées de la souris dans le ViewModel
    Par pansoul dans le forum Silverlight
    Réponses: 2
    Dernier message: 15/07/2010, 19h55
  3. [WD11] Récupérer les coordonnées d'une souris
    Par Redg9 dans le forum WinDev
    Réponses: 8
    Dernier message: 12/07/2010, 11h54
  4. [TASM] Récupérer les coordonnées de souris
    Par alibm dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 03/05/2009, 01h50
  5. récupérer les coordonnées de la souris
    Par miKL64 dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 14/10/2007, 22h43

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