let ask_position ~n ~m ~s () =
        
        (** s doit valoir "taille_piece". *)

        Graphics.set_window_title "Projet Puzzle : ou placer cette piece ? (Cliquer sur une case du plateau, ou 'Echap' pour annuler)";
        zenity_info "Projet Puzzle : où placer cette pièce ? (Cliquer sur une case du plateau, ou 'Echap' pour annuler)";
        
        (** Pour que l'utilisateur choisisse un point à l'écran. *)

        let (x_loc, y_loc) = (ref 0, ref 0) in
        let f_key = function
                |'\027' -> raise Fin;
                | _        -> ();
        in
        let f_mouse x y = 
                x_loc := x;        y_loc := y;
                Graphics.moveto x y;
                raise Fin;
        in
        (try 
        while true do 
                try 
                        let s = Graphics.wait_next_event  [Graphics.Button_downGraphics.Key_pressed
                        in 
                        if s.Graphics.keypressed then f_key s.Graphics.key
                        else 
                         if s.Graphics.button 
                         then f_mouse s.Graphics.mouse_x s.Graphics.mouse_y
                with 
                | Fin -> raise Fin
        done
        with Fin  -> () ;
        );
        print_string ("Vous avez cliqué en x="^(string_of_int !x_loc)^", et y="^(string_of_int !y_loc)^". Cela vous conviend ?");
        
        (** Pour retrouver les indices (i,j) correspondant. *)

(*~x:(10 + (2*s+4)*i ) ~y:(10 + (2*s+4)*j )*)
        let (i, j) = ( ((!x_loc - 10) / (2*s+4)), ((!y_loc - 10) / (2*s+4))) in
        if ((i < 0) || (i >= m)) then (
                zenity_info "Projet Puzzle : où placer cette pièce ? La coordonnée horizontale n'est pas valide";
                raise Fin;
        );
        if ((j < 0) || (j >= n)) then (
                zenity_info "Projet Puzzle : où placer cette pièce ? La coordonnée verticale n'est pas valide";
                raise Fin;
        );
        (i, j)