On Fri, May 04, 2001 at 01:09:39PM +0200, flexx@voila.fr wrote: > Bonjour ! > > Je souhaite r?aliser un programme de dessin en caml, dans le cadre scolaire. > Cependant, j'ai un probleme: je n'arrive pas ? d?clarer des variables globales. > Notre prof voudrait que l'on fasse quelques fonctions de dessin (agrandissement, rotation...), mais on doit utiliser Caml en mode fonctionnel. > Comment faire ? mmm, j'ai modifier un peu et tester le resultat. Plutot sympa, mais il y a quelques problemes, dont j'imagine tu t'est rendu compte : de temps a autres, cela plante, cela a a voir avec les bouton que l'on choisi, en particulier les 2 premiers (lignes et ligne brise), je pense que tu effectue une boucle qui ne s'arete pas comme il faut. A verifier donc. Et les valeurs par defaut du rectangle ne sont pas correcte : si tu veut dessiner un rectangle plein, et que tu passe la souris sous le premier point, alors le rectangle est dessiner depuis le bas du dessin. J'imagine que l'erreur vient d'une valeur qui devient negative ou quelque chose du genre. De meme pour les lignes brise, tu part de (0,0) c'est pas tres propre. Et il serait utile de 'clipper' les dessins pour ne pas sortir de la zone de dessin et ecrire sur les boutons. De plus, tu ne tient pas reellement compte de l'avantage d'avoir des fonctions comme valeurs. Tu peut tres bien faire : let icone_ligne_brise origin_x origin_y = (* dessine l'icone ligne brisee a partir de l'offset origin_x, origin_y *) let icone_ligne origin_x origin_y = (* dessine l'icone lignes a partir de l'offset origin_x, origin_y *) let bouton icone x y w h selectionner = let fg,bg = if selectionner then 0xFFFFFF, 0x000000 else 0x000000, 0xFFFFFF in set_color fg; moveto x y;lineto x (y+h);lineto (x+w) (y+h); set_color bg; lineto (x+w) y; lineto x y; icone x y; puis tu fait : bouton icone_ligne_brise 10 10 30 30 false; bouton icone_lignes 10 10 30 30 false; ou quelque chose du genre. Aussi, essaye de mieux separer les parties de ton programme, en particulier pour la gestion du dessin et des clicks souris. Finalement, voici un petit bout de code qui contient un peu de calcul matriciel qui peut t'aider si tu veut (c'est du code ocaml). Bonne chance pour tes exams, ... Amicalement, Sven Luther