File: simple.ml

package info (click to toggle)
ocaml-doc 3.09-1
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 10,428 kB
  • ctags: 4,963
  • sloc: ml: 9,244; makefile: 2,413; ansic: 122; sh: 49; asm: 17
file content (127 lines) | stat: -rw-r--r-- 4,277 bytes parent folder | download | duplicates (2)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
(*
Q: On choisit de configurer le bouton *avant* de l'afficher.

Q: On veut effectivement afficher.
*)


(* Programme simple.
open Tk;;
let topwindow = openTk();;
let b1 = Button.create topwindow [Text "hello world!"];;
let b2 = Button.create topwindow [Text "Quit"; Command closeTk];;
let _ = pack [b1; b2] [];;
let _ = mainLoop();;

(* Programme simple. *)
open Tk;;
let c = ref 0;;
let topwindow = openTk();;
let bclick = Button.create topwindow [Text "hello world!"];;
let bcount = Button.create topwindow [Text "hello world!"];;
let bquit = Button.create topwindow [Text "Quit"; Command closeTk];;
let _ = pack [bclick; bcount; bquit] [];;
let _ = mainLoop();;

(* Programme simple. *)
open Tk;;
let c = ref 0;;
let incr_counter() = incr c;;
let display_counter b = Button.configure b [Text(string_of_int !c)];;
let topwindow = openTk();;
let bcount = Button.create topwindow [Text "never clicked"];;
let bclick = Button.create topwindow
    [Text "hello world!"; Command(fun () -> incr_counter(); display_counter bcount)];;
let bquit = Button.create topwindow [Text "Quit"; Command closeTk];;
let _ = pack [bclick; bcount; bquit] [];;
let _ = mainLoop();;

(* Programme simple. *)
open Tk;;

let incr_counter, display_counter, read_c =
   let c = ref 0 in
   (fun () -> incr c),
   (fun b -> Button.configure b [Text(string_of_int !c)]),
   (fun() -> !c);;

let topwindow = openTk();;
let bcount = Button.create topwindow [Text "never clicked"];;
let bclick = Button.create topwindow
    [Text "hello world!"; Command(fun () -> incr_counter(); display_counter bcount)];;
let bquit = Button.create topwindow [Text "Quit"; Command closeTk];;
let _ = pack [bclick; bcount; bquit] [];;
let _ = mainLoop();;

(* Programme simple. *)
open Tk;;

let incr_counter, display_counter =
  let c = ref 0 in
  (fun () -> incr c),
  (fun b -> Button.configure b [Text(string_of_int !c)]);;

let topwindow = openTk();;
let bcount = Button.create topwindow [Text "never clicked"];;
let bclick = Button.create topwindow
    [Text "hello world!"; Command(fun () -> incr_counter(); display_counter bcount)];;
let bquit = Button.create topwindow [Text "Quit"; Command closeTk];;
let _ = pack [bclick; bcount; bquit] [];;
let _ = mainLoop();;
*)

(* Programme simple. *)
open Tk;;

let incr_counter, display_counter =
  let c = ref 0 in
  (fun () -> incr c),
  (fun b -> Button.configure b [Text(string_of_int !c)]);;

let topwindow = openTk();;
let label = Label.create topwindow [Text "un petit label"]
let bcount = Button.create topwindow [Text "never clicked"];;
let bclick = Button.create topwindow
    [Text "hello world!"; Command(fun () -> incr_counter(); display_counter bcount)];;
let bquit = Button.create topwindow [Text "Quit"; Command closeTk];;
let _ = Button.configure bquit
    [Background(NamedColor "red"); Foreground(NamedColor "white")];;
let _ = pack [label] [];;
let _ = pack [bclick; bcount] [Side Side_Top];;
let _ = pack [bquit] [Side Side_Top];;
let _ = mainLoop();;

(*
Q: "Wait a minute": qu'est ce qui se passe effectivement ? Tk a "pris la main"
    du programme ? Autrement dit, si je "termine" ma session Tk, je continue le
    programme OCaml "aprs" le mainLoop comme si de rien tait ?

Q: Ok, je comprends. Et si je "tue" l'application graphique en fermant
    "brutalement" la fentre ?

Q: Ok, je comprends. J'ai hte de voir a!

Q: Joli, je vois maintenant comment rajouter le deuxime bouton  condition de
    me donner la commande  lui affecter pour "quitter" la fentre ?

Q: Ok, maintenant je veux un "tat" (et ne me parler pas d'objets!): prenons un
    exemple simple; je souhaite rajouter un compteur qui sera affich (dans un
    troisime bouton ?) et qui sera incrment  chaque fois qu'on appuye sur
    le boutton "hello...".

Q: Oui, oui: local au bouton svp!

Q: C'est brutal, allons-y, on verra si on peut faire mieux aprs

Q: Peut-on contrler l'endroit o s'ouvre ma fentre principale (au lieu de
   s'ouvrir toujours en bas  gauche) ?

Q: On avait voqu la "brutalit"; peut-on tre plus "cultiv" ?

Q: Je voudrais encore afficher un texte (ici un texte fixe, mais ce pourrait
   tre le contenu d'un fichier texte), en coloriant un mot, du genre:
   "J'aime OCaml et ses outils graphiques", en mettant OCaml en rouge.

*)