From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id HAA16157; Thu, 9 Jan 2003 07:43:58 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id HAA16429 for caml-list@pauillac.inria.fr; Thu, 9 Jan 2003 07:43:57 +0100 (MET) Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id GAA15328 for ; Thu, 9 Jan 2003 06:32:12 +0100 (MET) Received: from main.gmane.org (main.gmane.org [80.91.224.249]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id h095WAr13101 for ; Thu, 9 Jan 2003 06:32:11 +0100 (MET) Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18WVHS-0003ll-00 for ; Thu, 09 Jan 2003 06:31:02 +0100 X-Injected-Via-Gmane: http://gmane.org/ To: caml-list@inria.fr Received: from news by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 18WVH5-0003kw-00 for ; Thu, 09 Jan 2003 06:30:39 +0100 Path: not-for-mail From: "=?iso-8859-1?q?Micha=EBl_Gr=FCnewald?=" Subject: [Caml-list] Re: probleme de liaison avec un canvas Date: 09 Jan 2003 06:37:47 +0100 Organization: (none) Message-ID: <87el7mhoic.fsf@ketanu.dyndns.org> References: <3E1C051D.AC1FE622@ifsic.univ-rennes1.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Complaints-To: usenet@main.gmane.org User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Sebastien Gandia - maitrise writes: > Bonjour, je travaille avec la librairie LablTK, et je desire associer a > un canvas un evenement. > Cet evenement est par exemple : > > -quand on clique dans le canvas , on recupere les coordonnées de la zone > cliquée > > ça peut-etre aussi une action associée. > > J'ai essayé avec canvas.bind mais ça n'a aucun effet. > Ainsi pourriez vous me donner un exemple de code utilisant canvas.bind > pour que je puisse comparer son implementation avec la mienne, car je > pense que la solution est là. Avec plaisir, dans la distribution de Tk il y a une floppée d'exemples, pour faire connaissance avec ocamltk, je me suis entraîné à les traduire. Exercice recommandé, il me semble. Je me suis arrêté à un, le voici : (* simple_graph *) open Tk;; let font_label = "arial";; let font_plot = "Helvetica 18";; let toplevel = opentk ();; let w_msg = Label.create ~font:font_label ~justify:`Left ~takefocus:false ~text:("This windows displays a canvas widget containing" ^" a simple two dimensional plot." toplevel) ;; pack [w_msg];; (* frame and buttons *) let w_frame = Frame.create toplevel;; let b_dismiss = Button.create ~text:"Dismiss" w_frame;; let b_seecode = Button.create ~text:"See Code" w_frame;; pack ~side:`Bottom ~fill:`X [w_frame];; pack ~side:`Left ~fill:`X [b_seecode; b_dismiss];; (* canvas *) let canvas = Canvas.create ~relief:`Raised ~width:450 ~height:450 toplevel;; pack ~side:`Top [canvas];; (* oh le joli dessin *) (* les axes *) Canvas.create_line ~width:2 ~xys:[100,250; 400,250] canvas;; Canvas.create_line ~width:2 ~xys:[100,250; 100,50] canvas;; for k = 0 to 10 do ignore(Canvas.create_line ~width:2 ~xys:[100+k*30,250;100+k*30,245] canvas) done;; for k = 0 to 5 do ignore(Canvas.create_line ~width:2 ~xys:[100,250-k*40;105,250-k*40] canvas) done;; let point_list = [12,56;20,94;33,98;32,120;61,180;75,160;98,223];; let place_point (x,y) = let true_x = 100 + 3 * x in let true_y = 250 - (4*y)/5 in let r = 6 in let item = Canvas.create_oval ~x1:(true_x - r) ~x2:(true_x + r) ~y1:(true_y - r) ~y2:(true_y + r) ~width:1 ~fill:(`Color "Orange") ~outline:(`Color "Black") canvas in Canvas.addtag canvas ~tag:"point" ~specs:[`Withtag item] in List.iter place_point point_list;; (* Note: le tag "current" est géré par Tk, c'est l'objet en cours, par exemple, celui sous le pointeur. *) let change_color color = Canvas.configure_oval ~fill:(`Color color) canvas (`Tag "current") ;; type plot_t = {mutable lastX:int; mutable lastY:int; } ;; let plot = {lastX = 0; lastY = 0; } ;; let plot_down x y = begin Canvas.dtag canvas (`Tag "selected" ) "selected"; Canvas.addtag canvas ~tag:"selected" ~specs:[`Withtag (`Tag "current")]; Canvas.raise canvas (`Tag "current"); plot.lastX <- x; plot.lastY <- y; end ;; let plot_move x y = begin Canvas.move canvas (`Tag "selected") (x - plot.lastX) (y - plot.lastY); plot.lastX <- x; plot.lastY <- y; end ;; Canvas.bind ~events:[`Enter] ~fields:[] ~action:(function x -> change_color "Red"; () ) canvas (`Tag "point");; Canvas.bind ~events:[`Leave] ~fields:[] ~action:(function x -> change_color "Orange"; () ) canvas (`Tag "point");; Canvas.bind ~events:[`ButtonPressDetail 1] ~fields:[`MouseX;`MouseY] ~action:(function x -> plot_down x.ev_MouseX x.ev_MouseY) canvas (`Tag "point") ;; Canvas.bind ~events:[`ButtonReleaseDetail 1] ~fields:[`MouseX;`MouseY] ~action:(function x -> Canvas.dtag canvas (`Tag "selected") "selected") canvas (`Tag "point") ;; Canvas.bind ~events:[`Motion] ~fields:[`MouseX;`MouseY] ~action:(function x -> plot_move x.ev_MouseX x.ev_MouseY) canvas (`Tag "point") ;; mainLoop();; -- Michaël Grünewald - RSA PGP Key ID: 0x20D90C12 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners