Partage
  • Partager sur Facebook
  • Partager sur Twitter

Saisir du texte avec SDL?

Voici MA solution

Sujet résolu
    18 mars 2008 à 6:51:46

    EDIT 2009/04/13 (YYYY/MM/DD): Projet abandonné, utilisation déconseillée

    EDIT 22 Août 2008: J'ai ouvert un nouveau sujet pour présenter la version 2.0.0. Si vous êtes intéressés, c'est par ici.



    ----------------------------------------------

    Éditions:
    EDIT 7 Août 2008: Je viens de me remettre au codage de la version 2.00.
    La version actuellement disponible ( 1.03 ), décale tout ce qui est à l'écran lorsqu'on ouvre une zone de saisie.
    Ce bug sera corrigé lorsque la version 2.00 sortira. En attendant, je retire les liens vers Badongo qui, de toutes façons, semble obliger les utilisateurs à payer pour télécharger...

    EDIT 26 Juin 2008: Version 1.03 sortie. Voici les changements:
    -Correction des noms de fichiers (SDL_input -> SDL_Input) qui causaient des problèmes aux utilisateurs à cause de la casse du "Input".
    Tout ce qui a trait à la SDL_Input s'appelle maintenant SDL_Input.
    -Correction du nombre d'octets alloués lors de l'allocation de SDL_Input->chaine (sizeof( SDL_Input->chaine ) -> sizeof( *SDL_Input->chaine )).
    -Correction du bug qui plaçait un '\0' à l'endroit du curseur lors de l'appui sur entrée (ce qui coupait la chaîne si le curseur n'était pas à la fin de la chaîne).
    -Correction des quelques avertissements que la version 1.02 donnait.
    -Ajout de la version de la bibliothèque (SDL_INPUT_VERSION)

    Autres nouveautés:
    -Upload du tarball (Linux): RETIRÉ
    -Upload du rarfile (Windows): RETIRÉ

    Les éditions précédentes infos concernant les versions précédentes sont <lien url="http://www.siteduzero.com/forum-83-253457-2293856-saisir-du-texte-avec-sdl.html#r2293856">ici</lien> (pour ceux que ça intéresse :-° )


    Attention: Avec Windows, j'ai dû mettre le fichier de bibliothèque statique dans le dossier SDL de CodeBlocks (C:\Program Files\CodeBlocks\MinGW\SDL\lib chez moi) pour que ça fonctionne (le mettre dans le même dossier ne fonctionnait pas).

    Attention 2: N'oubliez pas de "link'er" libSDL_Input.a au projet.

    ----
    Les changements à venir sont:
    -Texte défilant (définition d'un zone de largeur X pouvant contenir un texte plus long que X)
    -Possibilité de définir la largeur et la hauteur de la zone de texte (SDL_Input->position.w/h)
    -Des exemples (snippets) d'utilisation de la bibliothèque dans la documentation
    -Faire la documentation au format html
    -Possiblement ajouter la possibilité de copier/coller/couper en se servant du presse-papiers (à voir).


    Nota: le projet prend maintenant le nom de SDL_Input.

    La documentation est RETIRÉE, voir le lien dans ma signature pour la dernière version.

    Le code source est RETIRÉ, voir le lien dans ma signature pour la dernière version.

    ----------------------------------------Post originel---------------------------------------------------

    Bonjour à tous,

    il y a longtemps (très longtemps!), j'avais commencé une fonction de saisie pour la SDL (que j'ai probablement posté quelque part sur ce forum). Enfin, j'ai remarqué récemment que beaucoup de Zér0s cherchent à saisir du texte avec la SDL. J'ai donc déterré les vestiges perdus de ma fonction et je me suis mis en tête de la rendre potable.

    Bref, c'est chose faite, ma petite bibliothèque de saisie en SDL fonctionne. J'ai encore beaucoup à faire dessus (les saisies multilignes ne sont pas encore gérées, je dois encore travailler sur la documentation des fonctions, etc.

    Enfin, toujours est-il que je la mets à disposition des Zér0s qui souhaiteraient s'en servir.

    La bibliothèque propose pas mal d'options intéressantes (enfin, selon moi :lol: ):
    • -La bibliothèque gère l'unicode, il n'y a donc pas de problème avec les claviers AZERTY\QWERTY et cie.
    • -Il est possible d'effacer la saisie avec [RETOUR ARRIERE] (backspace) ainsi qu'avec [SUPPR.] (del).
    • -Lors de l'effacement, la surface située sous la saisie est "restorée", c'est-à-dire que la fonction s'occupe elle-même de rafraîchir la zone de saisie.
    • -J'ai implémenté un curseur, qu'il est possible de positioner dans la saisie pour aller éditer les premières lettres sans pour autant devoir tout effacer (ce fut plus difficile que je ne l'aurais cru, mais ça fonctionne :D ).
    • -La fonction permet de définir quel fonction TTF utiliser (RenderUTF8_Solid, Shaded ou Blended)
    • -Possibilité d'arrêter une saisie et de la continuer plus tard (c'est-à-dire que la chaîne est conservée dans l'état ou elle était auparavant) ou bien, a contrario, de vider la chaîne et de reprendre de zéro.
    • L'utilisation de structures permet d'avoir plusieurs chaînes en mémoire en même temps et de les organiser comme bon vous semble
    • -Et plein d'autres choses que je vous laisse découvrir


    Et surtout, surtout, ne vous gênez pas pour commenter le code: si mes fonctions sont trop longues, si certaines parties semblent obscures, inutiles, etc.

    Merci d'avance.
    Cordialement,
    Vhann.
    • Partager sur Facebook
    • Partager sur Twitter
      18 mars 2008 à 10:32:57

      GG, je pense que tu vas faire des heureux ! :)
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        19 mars 2008 à 1:10:21

        EDIT: Je vais me servir de cette réponse pour lister les changements apportés (puisque mon autre post est déjà trop long pour ma connexion Internet :lol: ):

        EDIT 9 Juin 2008: La bibliothèque compile parfaitement, malgré quelques avertissements (warnings) concernant le signe de la chaîne de caractères. Cependant, ces avertissements sont nécessaires puisqu'il est uniquement possible de conserver des caractères accentués dans un tableau de "unsigned char". Pour ceux que ceci dérange, il vous suffit de suivre <lien url="http://www.siteduzero.com/tuto-3-10623-1-creer-des-bibliotheques-avec-code-blocks.html">l'excellent tuto de seb13 pour compiler la bibliothèque</lien>.

        EDIT 4 Juin 2008: Apparement, le code fonctionne parfaitement. Rapellez-vous qu'avec le main() de test il faut appuyer sur la touche '1' pour voir la zone de texte apparaître (ahh, ces utilisateurs :lol: ).

        EDIT 28 Mai 2008: Attention, un utilisateur m'a informé que la bibliothèque plantait. Je ne peux pas actuelleement tester, ayant réinstallé ma Linux (je n'ai pas pensé à installer SDL et SDL_ttf). En ce moment, je n'arrive pas à me connecter à Internet via mon modem (donc impossibilité de vérifier tout ça) (je suis sur un autre ordinateur en ce moment). Je crois que le problème vient de la différence d'encodage entre Linux et Windows. Désolé à tous du contre-temps :( .

        EDIT 27 Mai 2008 (2): J'ai décidé d'utiliser des ancres vers mes autres posts pour rapetisser ce post. Dès que j'aurai une connexion Internet fonctionnelle sur ma Linux, je vais upload'er les fichiers sur un site d'upload (fichiers sources, fichier de bibliothèque .a, Documentation).

        EDIT 27 Mai 2008: Et voici la documentation :D ! Attention, il est possible qu'il y ait quelques erreurs d'encodage dans les sources et d'autres problèmes de ce type, puisque je n'ai pas encore réussi à configurer mon modem sous Linux ce qui m'oblige à utiliser un autre ordinateur sous Windows (donc problèmes d'encodage etc).

        EDIT 20 mai 2008: Version 1.02: il est maintenant possible d'afficher des caractères accentués.

        EDIT 19 mai 2008: je sors maintenant la version 1.01! Même si j'ai encore plein d'idées d'améliorations et de choses à faire, j'espère que ça vous plaira.

        Nouveautés de la version 1.01:
        -Plus aucun arrêt du programme par la bibliothèque (sauf si vous le faites exprès). C'est-à-dire qu'il n'y a plus trace de "exit( -1 );" dans le code. Toutes les fonctions qui peuvent planter retourne maintenant un code d'erreur qu'il vous appartient de gérer.
        -Les touches «Début» ('HOME') et «Fin» ('End') sont maintenant gérées
        -Quelques fonctions ajoutées
        -Meilleure gestion du "poll'ing"
        -La bibliothèque est maintenant disponible sous forme de bibliothèque (fichier .a) [version Linux x86] (merci à seb13 pour son tuto sur le sujet :) )

        19 mars 2008: Correction de l'erreur de compilation provoquée par le changement des noms des fichiers sans changer leur référence dans le code (le projet devrait compiler sans erreur maintenant). Si votre compilateur vous indique une/des erreurs, merci de me le signaler sur ce sujet ou via MP.

        19 mars 2008: Bug découvert (et corrigé) qui n'empêchait pas la compilation, mais provoquait un buffer overflow lorsqu'on appelait saisirSDL la 2e fois.

        20 mars 2008: Bug découvert (et corrigé) qui plantait le programme lorsque l'utilisateur tappait plusieurs touches par secondes tout de suite après avoir appellé saisirSDL(): le bug était dû au fait que la police de caractère (TTF_Font*) était déclarée dans le prototype de la fonction comme un pointeur constant ce qui, apparement, faisait planter TTF_SizeText(). Le pointeur n'est plus déclaré constant, mais ne sera pas modifié pas la fonction, ne vous en faites pas ;) .

        20 mars 2008: Bug découvert: le programme plantait dû à un oubli de ma part: j'avais oublié de réserver une case-mémoire pour le caractère de fin de chaîne ('\0'). Le programme plantait lorsqu'il essayait de libérer cette case donc (corrigé).

        20 mars 2008: Bug découvert: Il pouvait arriver que le programme libère deux fois de suite le même emplacement mémoire, provoquant une erreur de segmentation.

        20 mars 2008: Ajout: Remise systématique des pointeurs à NULL une fois libérés (corrige le bug ci-haut mentionné).

        20 mars 2008: Bug découvert: Écrire du texte pour ensuite l'effacer en alternant "retour arrière" et "supprimer" provoquait une erreur de segmentation dûe à test (if) incomplet (corrigé).

        20 mars 2008: Je n'ai pas réussi à faire replanter le programme. J'imagine donc que toutes les erreurs ont été corrigées.


        @Fvirtman:
        Merci de ton soutien :) !

        J'espère surtout avec des commentaires/réponses :) (pour savoir quels points sont à améliorer).

        P.S.: GG = Go Go? Good G... ?

        Cordialement,
        Vhann.
        • Partager sur Facebook
        • Partager sur Twitter
          19 mars 2008 à 15:39:18

          Good Game ^^ Je voulais tenter de faire une fonction de saisie avec SDL mais la plus la peine ;) (j'ai pas encore testé mais dés que je fait un projet sous SDL je teste ^^ )
          • Partager sur Facebook
          • Partager sur Twitter
            19 mars 2008 à 18:54:25

            Salut,

            GG ou good game, ou GaGné en l’occurrence et avec une mauvaise traduction fr ^^

            Ca semble vachement sympa en tous cas, ca mérite à mon avis plus qu’un post sur le forum. Une petite page web dédiée serait la bienvenue!

            Donc bravo et merci ca va être bien utile :D
            • Partager sur Facebook
            • Partager sur Twitter
              20 mars 2008 à 2:59:09

              Documentation (SDL_Input Documentation.odt):
              **RETIRÉ**

              ------------------
              Message d'origine:

              Ça signifie pas d'erreur lors de la compilation ça? :D

              Sinon, je ne considère pas le projet assez important pour faire une page web. Il faut d'abord que je termine. C'est-à-dire gérer la saisie multiligne ( définir un "message box" et "clip'per" l'affichage en fonction de ce rectangle), créer une documentation sous forme de pages html, gérer correctement les erreurs dans la bibliothèque (renvoi d'une valeur d'erreur plutôt qu'un simple exit( -1 )) et peut-être plus qui sait.

              Enfin, merci de vos réponses, c'est plaisant de savoir que ça sera utile à quelqu'un :) .

              Cordialement,
              Vhann.
              • Partager sur Facebook
              • Partager sur Twitter
                20 mars 2008 à 11:29:57

                Au passage, si tu veux un truc un peu "joli" :
                1. int saisirCaractereSDL( int saisieBloquante, int *caractereSaisi, int *touche ) {
                2.     int caractereAffichable = 0;
                3.     SDL_Event event;
                4.     int (*GetEvent)(SDL_Event *) = saisieBloquante ? SDL_WaitEvent : SDL_PollEvent;
                5.     do {
                6.        /* Cela revient avec ton if, sauf que le test est fait une fois
                7.         * pour determiner quel est la fonction a appeler.
                8.         */
                9.        GetEvent( &event );
                10.        ...
                11.     }
                12.     ...
                13. }


                En espérant que je ne me sois pas trompé. Je trouve simplement cela plus esthétique, niveau perf, j'en ai aucune idée ^^'. A vue de nez, je dirais que tu n'y perds pas.
                • Partager sur Facebook
                • Partager sur Twitter
                  20 mars 2008 à 17:19:58

                  Si j'ai bien compris ton exemple groscask, il s'agit en fait de créer un pointeur de fonction nommé GetEvent qui prend comme argument un pointeur sur "SDL_Event" (tout comme les deux fonctions SDL_WaitEvent() et SDL_PollEvent() ?

                  Déjà, si j'ai bien compris, ça reste pas clair pour moi: comment le compilateur sait-il qu'il s'agit d'une fonction et non pas d'une variable (puisque les parenthèses sont absentes)? Pourquoi ne pas plutôt faire &SDL_WaitEvent( NULL ) ?

                  Sauf pour atexit( ), je n'utilise pas les pointeurs de fonctions.

                  Merci de ta contribution toutefois.

                  Cordialement,
                  Vhann.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 mars 2008 à 20:08:59

                    Oui c'est exactement cela !

                    Citation : Vhann


                    Déjà, si j'ai bien compris, ça reste pas clair pour moi: comment le compilateur sait-il qu'il s'agit d'une fonction et non pas d'une variable (puisque les parenthèses sont absentes)? Pourquoi ne pas plutôt faire &SDL_WaitEvent( NULL ) ?



                    Cela est dû à deux choses :
                    - Primo, la syntaxe de la déclaration un peu particulière :
                    1. int (*GetEvent)(SDL_Event *);

                    Vient de la priorité des opérateurs... Ce n'est donc là qu'une question de syntaxe et d'habitude au final.
                    - Secundo, le nom d'une fonction représente également son adresse en C. D'où l'absence du & classique. Note bien que cette syntaxe est également admise !

                    Cordialement,
                    G.csk
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 mars 2008 à 20:42:49

                      D'accord, merci de la précision.

                      Je vais tester tout ça, mais plus tard, car la bibliothèque est (enfin!) en version stable. :)

                      Cordialement,
                      Vhann.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 avril 2008 à 20:01:19

                        j'ai moi même créé ma lib pour faire des champ de saisie mais pour mes applications SDL/OpenGL

                        J'utilise les même fonctionnalités que les tiennes mais je vais rajouté la possibilité de selection et de Copier/Coller
                        puis je tenterais l'overflow (barre de défilement (gauche/droite) )

                        Si quelque veut les sources je veut bien les montrer

                        Edit : j'ai ajouter maintenant le défilement

                        PS: j'utilise la SDL (pas SFML) en C++
                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 avril 2008 à 3:09:07

                          Citation : maxima

                          j'ai moi même créé ma lib pour faire des champ de saisie mais pour mes applications SDL/OpenGL

                          J'utilise les même fonctionnalités que les tiennes mais je vais rajouté la possibilité de selection et de Copier/Coller
                          puis je tenterais l'overflow (barre de défilement (gauche/droite) )

                          Si quelque veut les sources je veut bien les montrer

                          Edit : j'ai ajouter maintenant le défilement

                          PS: j'utilise la SDL (pas SFML) en C++



                          Hum, l'utilisation du "clipboard" m'intéresse. Est-ce que ton projet est portable ou bien utilise-t-il l'API Windows? Je serais curieux de connaître comment on envoie une chaîne à Klipper et associés (équivalents du Windows "clipboard").

                          Cordialement,
                          Vhann.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            6 avril 2008 à 10:34:35

                            Hum, ça m'a l'air hyper intéressant ça ! Je test et je te dis ce que j'en pense...

                            J'ai fait une fonction qui gère les menus en SDL, personnellement. Il faudrait un gros topic épinglé avec toutes les fonctions SDL crées par les membres pour se simplifier la vie ^^.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              6 avril 2008 à 13:19:33

                              Oui c'est sûr faudrait en parler à un modérateur pour faire un sujet comme celui là

                              On pourrait y mettre plein de fonction SDL pour : gerer les menus, gerer les champs textes, gerer les grands champs de saisie, gerer les cases à cochers etc... ;)

                              Edit (pas vu le message de vhann) : je suis en train de faire ma fonction Copier/Coller, j'ai fait ceci mais ça ne sera pas portable c'est ça le principale problème, faudrait avoir pour faire les mêmes fonctions avec un système Unix et MacOS

                              PS: les fonctions ne sont pas de moi ^^

                              1. #include <windows.h>
                              2. #define REDIRECT_IF(condition, label) if(condition) goto label
                              3. #define EXIT_LABEL local_exit
                              4. #define EXIT_IF(condition) REDIRECT_IF(condition, EXIT_LABEL)
                              5. char const *GetClipboardText()// Coller
                              6. {
                              7.     char *text = NULL;
                              8.     EXIT_IF(!IsClipboardFormatAvailable(CF_TEXT));
                              9.     EXIT_IF(!OpenClipboard(NULL));
                              10.     {
                              11.         char *textMem = (char*)GetClipboardData(CF_TEXT);
                              12.         /* delete devra être utilisé une fois le texte utilisé */
                              13.         text = new char[lstrlen(textMem)+1];
                              14.         lstrcpy(text, textMem);
                              15.     }
                              16.     CloseClipboard();
                              17.     EXIT_LABEL:
                              18.         return text;
                              19. }
                              20. int SetClipboardText(char const *text)// Coppier
                              21. {
                              22.     int ret = 0;
                              23.     HANDLE hGlobalMem = GlobalAlloc(GHND, lstrlen(text)+1);
                              24.     char *lpGlobalMem = NULL;
                              25.     EXIT_IF(hGlobalMem == NULL);
                              26.     lpGlobalMem = (char*)GlobalLock(hGlobalMem);
                              27.     EXIT_IF(lpGlobalMem == NULL);
                              28.     lstrcpy(lpGlobalMem, text);
                              29.     GlobalUnlock(hGlobalMem);
                              30.     EXIT_IF(!OpenClipboard(NULL));
                              31.     EmptyClipboard();
                              32.     if(SetClipboardData(CF_TEXT, hGlobalMem) != NULL)
                              33.         ret = 1;
                              34.     CloseClipboard();
                              35.     EXIT_LABEL:
                              36.         return ret; /* 1 : Succeed, 0 : Failure */
                              37. }


                              PS² : j'essaie de trouver quelque chose pour accepter la saisie de caractere spécial ( é, à, è...) dans ma classe de Saisie si vous avez une idée...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                10 avril 2008 à 16:26:50

                                (La dernière réponse date d'il y a longtemps, mais je viens de la remarquer).

                                Maxima, je ne comprends pas pourquoi tu viens faire de la publicité pour ton code ici:

                                1- C'est en C++ alors que ce forum est un forum C.
                                2- Je remarque qu'il y aurait beaucoup à critiquer sur la fonction que tu as trouvé sur le net: (non-portable, utilisation de goto & labels)

                                Du fait que ta lib (sic!) soit en C++ et ma bibliothèque en C, elles sont toutes deux complémentaires et non en compétition -c'est l'impression que ta première *deuxième* réponse me laisse.

                                Donc, je crois que tu devrais plutôt poster pour ta bibliothèque dans le forum C++.

                                Cordialement,
                                Vhann.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 mai 2008 à 1:06:33

                                  ouah thank you Vhann c'est ce que je cherchais
                                  ça va être super pour entrer les noms des joueurs dans un tableau de score par exemple :)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    9 mai 2008 à 2:10:20

                                    Content que ça te plaise :) .
                                    Je devrais publier une prochaine version bientôt (avec garbage collector :p ).

                                    Cordialement,
                                    Vhann.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      19 mai 2008 à 12:09:17

                                      Pour ceux que ça intéresse, je viens de sortir la nouvelle version (1.01).

                                      EDIT: le garbage collector a été abandonné bien que parfaitement fonctionnel puisque inutile.

                                      Cordialement,
                                      Vhann.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        20 mai 2008 à 18:19:24

                                        Je ne sais pas si mon projet en intéresse certains, mais les caractères accentués sont maintenant parfaitement gérés (et la compilation ne produit aucun warning).

                                        Cordialement,
                                        Vhann.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          20 mai 2008 à 19:20:56

                                          Bien sûr que si ça intéresse ! Très utile, bien coder, parfait ! ^^ Merci beaucoup Vhann je suis sur que ça vas en aider plus d'un !
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            20 mai 2008 à 19:59:06

                                            Et bien merci Nakio, c'est encourageant de recevoir des commentaires (qu'ils soient positifs ou négatifs).

                                            Cordialement,
                                            Vhann.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              20 mai 2008 à 20:03:37

                                              Je n'en ai pas l'utilitée pour l'instant, mais ta lib pourrait m'être utile un jour ^^.
                                              Par contre, tu devrai soit fournir le .a et un .h, soit fournir une archive avec les sources...
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                20 mai 2008 à 20:04:30

                                                serait-il possible d'avoir le projet compiler pour windows ou alors un tuto pour le compiler avec CodeBlock
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  20 mai 2008 à 20:19:14

                                                  @gigotdarnaud: Les sources sont là (en secret pour ne pas encombrer la page). Pour le .a, il me faudrait un endroit (les sites comme megaupload sont peu fiables pour assurer la pérennité d'un lien de téléchargement). Je pense traduire la bibliothèque et la proposer sur le site de la SDL (on verra s'ils en veulent ou pas) une fois que j'aurais terminé la documentation.

                                                  @madmax02: Tu peux soit aller voir le tuto de seb13 dans Tutoriels->Non officiels->Programmation->C->Créer des bibliothèques avec Code::Blocks ou bien tu peux tout simplement créer des fichiers SDL_input.h, SDL_inputAfficher.c, SDL_inputGestion.c, les ajouter à tes projets, puis copier le code posté ici dedans.

                                                  Cordialement,
                                                  Vhann.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    25 mai 2008 à 20:48:05

                                                    Salut, j'ai un petit soucis, j'ai eu beau lire tout ton code, je n'arrive pas a récupérer la saisie dans un tableau de type char.

                                                    Donc j'ai éssayé
                                                    while (i <= 24)
                                                    {
                                                        info->nomGolf[i] = saisie->chaine[i];
                                                        i++;
                                                    }
                                                    


                                                    mais je n'arrive a rien ...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      26 mai 2008 à 4:02:47

                                                      Citation : Masado

                                                      Salut, j'ai un petit soucis, j'ai eu beau lire tout ton code, je n'arrive pas a récupérer la saisie dans un tableau de type char.

                                                      Donc j'ai éssayé

                                                      while (i <= 24)
                                                      {
                                                          info->nomGolf[i] = saisie->chaine[i];
                                                          i++;
                                                      }
                                                      



                                                      mais je n'arrive a rien ...



                                                      le code plus approprié serait sûrement:
                                                      for( i = 0; saisie->chaine[ i ] != NULL; i++ ) {
                                                      info->nomGolf[ i ] = saisie->chaine[ i ];
                                                      }
                                                      


                                                      En déclarant info->nomGolf comme étant une chaîne de unsigned char, ça devrait fonctionner (je ne suis pas sur le bon ordinateur, mais je tester pour être certain que ça fonctionne aussitôt que possible).

                                                      Cordialement,
                                                      Vhann.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        26 mai 2008 à 19:36:02

                                                        case SDL_KEYDOWN:
                                                                        if( event.key.keysym.sym == SDLK_1 )
                                                                         {
                                                                            erreur = SDL_InputSaisir( saisie, ecran, police, &couleurTexte,
                                                                                    &couleurFond, SDL_INPUT_FOND_UNI, 1 );
                                                        
                                                                            fprintf(stderr, "erreur = %ld", erreur);
                                                        
                                                                            for( i = 0; saisie->chaine[ i ] != NULL; i++ )
                                                                            {
                                                                                info->nomGolf[ i ] = saisie->chaine[ i ];
                                                                            }
                                                        
                                                        
                                                                                    SDL_Flip(ecran);
                                                                        }
                                                                        break;
                                                        


                                                        voilà apparemment j'entre pas dans la boucle d'event car mon fichier stderr ne se rempli pas lorsque j'appuye sur une touche alors que tout les autres evenements fonctionnent ^^

                                                        EDIT :

                                                        J'ai trouvé l'erreur, elle vient du main que tu fournis

                                                        tu as écrit :

                                                        if( event.key.keysym.sym == SDLK_1 )
                                                        


                                                        au lieu de :

                                                        if( event.key.keysym.sym )
                                                        


                                                        Sans ca, mon code marche a la perfection

                                                        EDIT2 :

                                                        Voilà que je rencontre a nouveau un probleme, a chaque fois que je presse la touche entrée, (suivez bien ^^) ma fenêtre ne bouge pas mais ce qui est a l'interieur se déplace en bas a droite, ce qui fait que ce qui est en bas a droite disparait de l'écran ... J'ai en fait éssayé de modifier la position du texte mais je trouve pas la bonne variable =D
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          27 mai 2008 à 8:29:01

                                                          "if( event.key.keysym.sym == SDLK_1 )" c'est pour ne pas activer la saisie à chaque frappe de touche (quand on "debug", ça va mieux comme ça :lol: ).

                                                          Sinon, pour modifier l'emplacement du texte, c'est [structure SDL_Input]->position.x ( et/ou .y ).

                                                          Pour le reste, je ne crois pas que le problème soit dû à ma bibliothèque.

                                                          P.S.: Oui, je sais, il manque une documentation pour tout ça parce que là vous devez parcourir mon code pour pouvoir l'utiliser, mais c'est long et ennuyant écrire une doc :p (ok ok, je m'y mets :lol: ).

                                                          Cordialement,
                                                          Vhann.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            27 mai 2008 à 18:17:12

                                                            Salut, pourrait - tu donner un exemple car j'ai éssayé ca

                                                            saisie->position.x = 20;
                                                               saisie->position.y = 150;
                                                            


                                                            mais ca bug toujours, l'interieur de l'écran se déplace en bas a droite donc tout se décale , mon champ d'écriture est la ou je veux mais le reste du texte s'enfuit ^^ donc voilà. Sinon merci pour cette bibliothèque :)
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              27 mai 2008 à 18:49:36

                                                              Simple question(désolé si quelqu'un l'a deja écris/demandé), y-a-til un moyen de récuperer dans un bete tableau de char de la fonction main la chaine écrite avec ce code?

                                                              EDIT: Non c'est bon j'ai réussis :p
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Saisir du texte avec SDL?

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown