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 :

Ocaml formulaire en interface graphique.


Sujet :

Caml

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Points : 33
    Points
    33
    Par défaut Ocaml formulaire en interface graphique.
    Bonjour,

    Alors je me permets de créer ce post afin de savoir si on pourrait m'aiguiller sur la façon de faire un équivalent de read_string() en ocaml mais en interface graphique avec gtk.

    basé sur ce code venant d'un site (fonctionne impec)

    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
     
    (* Initialisation de GTK. Voir la discussion plus loin. *)
    let _ = GMain.init ()
     
    (* Fenêtre principale de l'application. *)
    let window = GWindow.window
      ~title:"Convertisseur RGB <=> HEXA"
      ~height:100
      ~width:800 ()
     
    (* Bouton qui souhaite le bonjour à l'utilisateur. *)
    let say_hello = GButton.button
      ~label:"Bonjour !"
      ~packing:window#add ()
     
    (* Fonction qui affiche le message sur stdout. *)
    let print_hello () =
      let user = Glib.get_user_name () in
      Printf.printf "Bonjour %s !\n%!" (String.capitalize user)
     
    let _ =
      window#connect#destroy ~callback:GMain.quit;
      say_hello#connect#clicked ~callback:print_hello;
      window#show ();
      GMain.main ()
    Pour ceux que ça intéresse ce bout de code :
    En gros le code m'affiche un bouton avec marqué bonjour, à chaque fois que l'on clique dessus renvoie la fonction print_hello qui affiche alors 'bonjour + nom de l'utilisateur de l'OS'.

    Ce que j'aimerais faire c'est simplement pouvoir faire un formulaire afin de convertir du code hexa & rgb et vice versa.

    Pour le moment j'ai démarré le programme qui s'occupe de la conversion hexa à rgb seulement voici le code :

    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
    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
     
    print_endline "Vous pouvez entrez votre code hexadécimal :";
    print_string "#";;
    let lecture_string  =
    	read_line();;
    let n0 =
    	ref 0;;
    let n1 =
    	ref 0;;
    let n2 =
    	ref 0;;
    let n3 =
    	ref 0;;
    let n4 =
    	ref 0;;
    let n5 =
    	ref 0;;
    let rec verification a =
    	if a < 6 then
    		match lecture_string.[a] with
    			|'0'	->
    				begin match a with
    					|0 -> n0 := 0
    					|1 -> n1 := 0
    					|2 -> n2 := 0
    					|3 -> n3 := 0
    					|4 -> n4 := 0
    					|5 -> n5 := 0
    				end;
    				verification (a + 1)
    			|'1'	->
    				begin match a with
    					|0 -> n0 := 1
    					|1 -> n1 := 1
    					|2 -> n2 := 1
    					|3 -> n3 := 1
    					|4 -> n4 := 1
    					|5 -> n5 := 1
    				end;
    				verification (a + 1)
    			|'2'	->
    				begin match a with
    					|0 -> n0 := 2
    					|1 -> n1 := 2
    					|2 -> n2 := 2
    					|3 -> n3 := 2
    					|4 -> n4 := 2
    					|5 -> n5 := 2
    				end;
    				verification (a + 1)
    			|'3'	->
    				begin match a with
    					|0 -> n0 := 3
    					|1 -> n1 := 3
    					|2 -> n2 := 3
    					|3 -> n3 := 3
    					|4 -> n4 := 3
    					|5 -> n5 := 3
    				end;
    				verification (a + 1)
    			|'4'	->
    				begin match a with
    					|0 -> n0 := 4
    					|1 -> n1 := 4
    					|2 -> n2 := 4
    					|3 -> n3 := 4
    					|4 -> n4 := 4
    					|5 -> n5 := 4
    				end;
    				verification (a + 1)
    			|'5'	->
    				begin match a with
    					|0 -> n0 := 5
    					|1 -> n1 := 5
    					|2 -> n2 := 5
    					|3 -> n3 := 5
    					|4 -> n4 := 5
    					|5 -> n5 := 5
    				end;
    				verification (a + 1)
    			|'6'	->
    				begin match a with
    					|0 -> n0 := 6
    					|1 -> n1 := 6
    					|2 -> n2 := 6
    					|3 -> n3 := 6
    					|4 -> n4 := 6
    					|5 -> n5 := 6
    				end;
    				verification (a + 1)
    			|'7'	->
    				begin match a with
    					|0 -> n0 := 7
    					|1 -> n1 := 7
    					|2 -> n2 := 7
    					|3 -> n3 := 7
    					|4 -> n4 := 7
    					|5 -> n5 := 7
    				end;
    				verification (a + 1)
    			|'8'	->
    				begin match a with
    					|0 -> n0 := 8
    					|1 -> n1 := 8
    					|2 -> n2 := 8
    					|3 -> n3 := 8
    					|4 -> n4 := 8
    					|5 -> n5 := 8
    				end;
    				verification (a + 1)
    			|'9'	->
    				begin match a with
    					|0 -> n0 := 9
    					|1 -> n1 := 9
    					|2 -> n2 := 9
    					|3 -> n3 := 9
    					|4 -> n4 := 9
    					|5 -> n5 := 9
    				end;
    				verification (a + 1)
    			|'A'|'a'	->
    				begin match a with
    					|0 -> n0 := 10
    					|1 -> n1 := 10
    					|2 -> n2 := 10
    					|3 -> n3 := 10
    					|4 -> n4 := 10
    					|5 -> n5 := 10
    				end;
    				verification (a + 1)
    			|'B'|'b'	->
    				begin match a with
    					|0 -> n0 := 11
    					|1 -> n1 := 11
    					|2 -> n2 := 11
    					|3 -> n3 := 11
    					|4 -> n4 := 11
    					|5 -> n5 := 11
    				end;
    				verification (a + 1)
    			|'C'|'c'	->
    				begin match a with
    					|0 -> n0 := 12
    					|1 -> n1 := 12
    					|2 -> n2 := 12
    					|3 -> n3 := 12
    					|4 -> n4 := 12
    					|5 -> n5 := 12
    				end;
    				verification (a + 1)
    			|'D'|'d'	->
    				begin match a with
    					|0 -> n0 := 13
    					|1 -> n1 := 13
    					|2 -> n2 := 13
    					|3 -> n3 := 13
    					|4 -> n4 := 13
    					|5 -> n5 := 13
    				end;
    				verification (a + 1)
    			|'E'|'e'	->
    				begin match a with
    					|0 -> n0 := 14
    					|1 -> n1 := 14
    					|2 -> n2 := 14
    					|3 -> n3 := 14
    					|4 -> n4 := 14
    					|5 -> n5 := 14
    				end;
    				verification (a + 1)
    			|'F'|'f'	->
    				begin match a with
    					|0 -> n0 := 15
    					|1 -> n1 := 15
    					|2 -> n2 := 15
    					|3 -> n3 := 15
    					|4 -> n4 := 15
    					|5 -> n5 := 15
    				end;
    				verification (a + 1)
    			| _	-> 	print_endline "echec du programme";;
    verification 0;;
    let rgb0 =
    	!n0 * 16 + !n1;;
    let rgb1 =
    	!n2 * 16 + !n3;;
    let rgb2 =
    	!n4 * 16 + !n5;;
    print_string "Code RGB --> R : ";
    print_int rgb0;
    print_string "  -  G : ";
    print_int rgb1;
    print_string "  -  B : ";
    print_int rgb2;
    print_newline();;
    Ps : je me doute bien qu'il y a moyen de réduire considérablement le code (fonctions récursives ? )

    Merci d'avance pour votre aide !

  2. #2
    Membre régulier
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 102
    Points : 110
    Points
    110
    Par défaut
    Salut !

    Désolé mais je ne connais absolument rien en GTK.

    Par contre, pour la conversion hexa <-> rgb, je pense que tu trouveras ton bonheur ici :

    http://caml.inria.fr/pub/ml-archives...5da146.fr.html

    PS : et en cliquant sur "next" tu auras encore une autre solution

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Merci pour ta réponse tout d'abord !

    J'ai vu ton lien auquel je prête encore attention afin d'améliorer mon code.
    Mais le vrai souci que je rencontre est de le faire en interface graphique pour que ce soit plus convivial pour les adeptes de la souris.

    (Car j'ai déjà un logiciel qui peut me servir de convertisseur en ocaml complet en reprennant une fonction toute faite. Je n'ai malheureusement plus le lien du code source sous la main étant donné qu'il ne vient pas de moi, mais je me permets de le mettre pour ceux que ça intéresse)

    Une Personne.


    code :
    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
     
    let _ = GMain.init ()
     
    let window = GWindow.window 
      ~title:"Bonjour !" 
      ~height:75
      ~width:75()
     
    let link1 = GButton.color_button
      ~packing:window#add ()
     
    let _ =
      window#connect#destroy ~callback:GMain.quit;
      window#show ();
      GMain.main ()

  4. #4
    Membre régulier
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 102
    Points : 110
    Points
    110
    Par défaut
    Il faut que tu précises quel est exactement ton problème / ta question car on ne le comprend pas en lisant ton message.

    As-tu déjà tes fonctions qui réalisent les conversions ? Si non, commence par les écrire avant d'attaquer l'interface graphique. Je peux t'aider. Si oui, quel est le code que tu as écrit pour l'interface graphique et quel est le problème avec lui ? A priori, je ne pourrai pas trop t'aider sur ce point...

    PS :

    Pour ce qui est de GTK, as-tu connaissance de ces deux documents :
    - tutoriel
    - API
    Sinon je crois que SpiceGuid a écrit des tuto très clairs sur le sujet.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Points : 33
    Points
    33
    Par défaut
    Merci d'avoir répondu,

    Je vais essayer de faire bref pour que ce soit clair et ne pas me mélanger les pinceaux

    Tout simplement savoir comment faire un formulaire en interface graphique (soit l'équivalent d'un input en html, d'un read_line en terminal).

    Sur ce je ferai mieux de continuer mon apprentissage en terminal éventuellement.

    Bonne soirée

  6. #6
    Membre régulier
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 102
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par Une.Personne Voir le message
    Tout simplement savoir comment faire un formulaire en interface graphique (soit l'équivalent d'un input en html, d'un read_line en terminal).
    Ta question n'est toujours pas assez précise : tu demandes directement la réponse à ton problème, en gros que quelqu'un écrive le code à ta place. Ce n'est pas (du moins je pense) à poser ce genre de question que sert le forum (c'est plus le rôle de Google...)

    En gros l'idée c'est que les membres du forum peuvent t'aider mais ne peuvent pas faire le travail à ta place. Il y a plusieurs tuto sur lablgtk : les as-tu lus, ou au moins feuilletés ?

    Ensuite, et c'est le plus important, il faut que tu donnes un exemple en donnant ce que tu as essayé de faire, en précisant le problème avec cet exemple. Par exemple "Voici mon code. J'obtiens telle erreur dans telle situation, je ne comprends pas pourquoi, pouvez-vous m'aider ?". Bien entendu, il faut à chaque fois que tu passes du temps à essayer de comprendre toi même pourquoi est-ce que tu as cette erreur. Eventuellement, une fois que ton code marche, tu peux dire "Ce code marche, mais j'ai l'impression que telle partie est maladroite. Qu'en pensez-vous ?"

    Pour revenir à ta question : en survolant le lien pour le tuto que je t'ai filé, je suis tombé là dessus : http://plus.kaist.ac.kr/~shoh/ocaml/...ial/x1155.html. Ca me semble être pas mal pour ton problème

    Ce qu'il faut que tu fasses si tu n'as pas envie de te taper un tuto sur lablgtk de A à Z, c'est :

    - Imaginer des façon de faire possibles, des fonctions qui pourraient t'aider, trouver des mots clefs

    - Consulter la doc / des tutos pour voir les fonctions / objets disponibles

    - Construire une façon de faire possible à partir de ces éléments

    - L'implémenter, et débugguer

    Basé sur le peu que je connais de Tk, j'aurais envisagé un truc du genre :

    - Mettre deux machins qui permettent d'afficher et de taper du texte (une recherche rapide m'a amené sur le lien que je t'ai filé)

    - Mettre un bouton et y binder une fonction qui récupère le texte depuis les machins, effectue la conversion, puis réécris le résultat là où il faut.

    Avec les liens que je t'ai filé, il y a de quoi effectuer chacune de ces actions (créer les text entries, récupérer leur contenu / écrire dedans, créer un bouton, y binder une fonction). A toi de tout mettre ensemble pour que ça marche !

    Bonne chance !

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Points : 33
    Points
    33
    Par défaut
    Hey Bonjour !

    Merci pour ta réponse encore une fois ^^.

    Tu as bien raison de me dire que je ne dois pas demander qu'on fasse le problème à ma place et me rappeler à l'ordre sur ce sujet. En fait je pense que j'aurais mieux fait de simplement demander quel était le widget permettant d'écrire du texte dans la lib gtk. (je ne connais pas bien les termes que j'emploie, je sais vaguement ce qu'est un widget (pour moi c'est une sorte d'objet graphique) et gtk (pour moi est une librairie graphique) mais je n'en sais pas plus !

    Mais je vois le Gedit.Entries (enfin si ma mémoire est bonne je regarderai en tapant le code), que je n'avais pas vu avant j'avais tapé plein de termes mais certes pas ceux étant adéquats.

    Merci pour tes tuyaux en tout cas ! je testerai et re-testerai et si jamais je cale sur un bout de code je referai appel aux professionels de l'informtique !

    À la prochaine

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/03/2009, 18h15
  2. Réponses: 13
    Dernier message: 21/01/2009, 12h18
  3. OCaml, le réseau et les interfaces graphiques
    Par _SamSoft_ dans le forum Caml
    Réponses: 24
    Dernier message: 07/05/2008, 13h22
  4. interface graphique en ocaml
    Par slider22 dans le forum Caml
    Réponses: 3
    Dernier message: 18/04/2007, 00h36

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