Partage
  • Partager sur Facebook
  • Partager sur Twitter

Saisir du texte avec SDL?

Voici MA solution

Sujet résolu
    27 mai 2008 à 20:17:51

    Code source:
    **RETIRÉ**
    (Voir ma signature pour la version actuelle)

    ----------------------
    Message à l'origine:
    Ok, ok, je me mets illico à l'écriture de la doc ^^ .
    • Partager sur Facebook
    • Partager sur Twitter
      3 juin 2008 à 15:33:35

      voila encore merci pour tes code sources la jai un probleme avec le test main() jarrive a compiler le programme mais quand je presse sur une touche il n'y a rien d'afficher par contre jai installe verdana.tff donc jai aucune erreur la fenetre saficche en rouge mais rien decrit. je voudrais savoir si dautre perrsonne ont u des probleme avec le test. qu'est ce que vous me proposez. merci pour votre aide.
      • Partager sur Facebook
      • Partager sur Twitter
        3 juin 2008 à 16:32:58

        @wildwoolfy: As-tu lu l'EDIT du premier post? Je dis qu'un utilisateur m'a justement signalé que ça ne fonctionne pas à l'heure actuelle (je dois arriver à compiler mon pilote modem pour avoir l'accès Internet sur l'ordinateur sur lequel j'ai développé SDL_Input pour pouvoir le compiler et tout et tout).

        Bref, en théorie, d'ici le 10 Juin, ceci devrait être réglé, entre-temps, veuillez prendre votre mal en patience ^^ .

        Cordialement,
        Vhann.
        • Partager sur Facebook
        • Partager sur Twitter
          3 juin 2008 à 20:05:27

          ba merci Vahnn tenfais pas jai reussi a faire fonctionnner jai pas remarque qu'il fallait que jactive avec le chiffre 1. donc ca fonctionne je vais voir si je pourrais au moins ladapter a mes projets et modifier un peu s'il le faut. mais si je voudrais mettre ce que jai ecrit dans un tableau char pour l'utiliser comme une chaine de caractere comment tu pense que j pourrais le faire.
          • Partager sur Facebook
          • Partager sur Twitter
            4 juin 2008 à 19:19:21

            @wildwoolfy: Donc, ça fonctionne le code actuel? Et sans warnings rien?

            Quant à ce qui est de le mettre dans une chaîne de caractères, tu peux regarder sur la première page, un autre utilisateur a posé la même question. Sinon, aussitôt que je peux réinstaller la SDL et tout, je pense ajouter des "exemples d'utilisation" à la documentation du genre comment stocker la saisie dans une chaîne, comment "poll'er", comment placer la zone de saisie à tel endroit, etc.

            Cordialement,
            Vhann.
            • Partager sur Facebook
            • Partager sur Twitter
              8 juin 2008 à 21:37:57

              Euh? J'arrive pas à le faire marcher. Faut-il intégrer le fichier comme une bibliothèque (le mettre dans mingw32) ou le mettre dans son projet comme tout autre fichier source? Je l'ai mis dans mon fichier le .h et les 2 .c et ca bug a la compilation. Qu'est_ce qui faut faire?
              • Partager sur Facebook
              • Partager sur Twitter
                8 juin 2008 à 23:49:03

                Citation : jeremayyye

                [...] Qu'est_ce qui faut faire?


                Lire les messages d'erreur.
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juin 2008 à 13:02:42

                  @jeremayyye: Le projet fonctionne parfaitement (je viens tout juste de tester la version postée sur le SdZ). Il y a toutefois quelques warnings concernant le signe (puisque j'utilise un tableau de "unsigned char" au lieu de "char", mais c'est nécessaire pour pouvoir gérer les accents.

                  Ensuite, suffit de lire les messages d'erreur (comme dit plus haut par Ceylo). Pour info, j'inclus habituellement les fichiers de la bibliothèque dans un sous-dossier "SDL_input" alors regarde les lignes d'inclusion du main() (si tu as utilisé celui de test).

                  Cordialement,
                  Vhann.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juin 2008 à 20:59:43

                    Merci pour le code, par contre, comment faire pour qu'on ai pas besoin d'activer avec la touche 1 mais que ça s'active automatiquement ?

                    edit: un petit probleme, mon programme s'ouvre puis se ferme en 1 quart de seconde ..... j'ai tout bien mis pourtant, c'est depuis que j'ai voulus metttre une image en background:

                    #include <stdio.h>
                    #include <stdlib.h>
                    #include <SDL/SDL.h>
                    #include <SDL/SDL_ttf.h>
                    #include "SDL_input/SDL_input.h"
                    
                    void avorter( char message[], char messageErreur[] ) {
                    
                        fprintf( stderr, message, messageErreur );
                        printf( message, messageErreur );
                    
                        atexit( SDL_Quit );
                        atexit( TTF_Quit );
                        exit( EXIT_FAILURE );
                    }
                    
                    int main( int argc, char* argv[] ) {
                    
                        SDL_Surface *ecran = NULL, *imageDeFond = NULL;
                        SDL_Event event;
                        SDL_Rect pos = { 20, 300, 0, 0 };
                        SDL_Rect positionFond;
                        positionFond.x = 0;
                        positionFond.y = 0;
                        
                        SDL_Init(SDL_INIT_VIDEO);
                        
                        SDL_Color   couleurTexte = { 255, 255, 255, 0 },
                                    couleurFond = { 0, 0, 0, 0 };
                        SDL_Input *saisie = NULL;
                        TTF_Init();
                        TTF_Font *police = NULL;
                        int quitter = 0;
                        
                        SDL_Flip(ecran);
                        
                        if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {
                            avorter( "Erreur d'initialisation de la SDL: %s\n", SDL_GetError());
                        }
                    
                        if( TTF_Init() < 0 ) {
                            avorter( "Erreur d'initialisation de la TTF: %s\n", TTF_GetError());
                        }
                    
                    
                            if(( police = TTF_OpenFont( "arial.ttf", 15 )) == NULL ) {
                            avorter( "La police %s est introuvable\n", "arial.ttf" );
                        }
                    
                        if(( saisie = SDL_InputCreer( 50, pos )) == NULL ) {
                            TTF_CloseFont( police );
                            avorter( "Erreur d'allocation mémoire dans la fonction main: %s\n",
                                    SDL_GetError());
                        }
                        
                        SDL_WM_SetCaption("tealer Steam 1.8", NULL);
                        ecran = SDL_SetVideoMode(400, 400, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                        
                        imageDeFond = SDL_LoadBMP("background.bmp");
                        SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
                        SDL_Flip(ecran);
                    
                        SDL_EnableUNICODE( 1 );
                    
                        do {
                            SDL_Flip( ecran );
                            SDL_WaitEvent( &event );
                            switch( event.type ) {
                                case SDL_QUIT:
                                    quitter = 1;
                                    break;
                                case SDL_KEYDOWN:
                                    if( event.key.keysym.sym == SDLK_1) {
                                        SDL_InputSaisir( saisie, ecran, police, &couleurTexte,
                                                &couleurFond, SDL_INPUT_FOND_UNI, 1 );
                                    }
                                    break;
                                default:
                                    break;
                            }
                        } while( !quitter );
                        
                        SDL_InputLiberer( saisie );
                        TTF_CloseFont( police );
                        TTF_Quit();
                        SDL_FreeSurface(imageDeFond);
                        SDL_Quit();
                        return EXIT_SUCCESS;
                        pause();
                    }
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 juin 2008 à 15:19:29

                      @DM5087: Pour que ça fonctionne comme tu le veux, il ne faut pas copier-coller le main() de test et essayer de l'adapter. J'ai mis ce main() de test seulement pour que les autres puissent rapidement voir de quoi cette petite bibliothèque est capable.

                      Si tu ne sais pas comment faire pour seulement "afficher la zone de texte sans avoir à appuyer sur 1", je te conseille de simplement reprendre le cours de M@teo21 en douceur.

                      P.S.: Au premier coup d'oeil, je dirais que ton code plante à cause de la double initialisation de la SDL (SDL_Init()) dont une sans vérification du retour.

                      Cordialement,
                      Vhann.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 juin 2008 à 13:49:26

                        Comment on fait pour utiliser le texte saisie après, par exemple si on veut le ré-afficher ?
                        Merci
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 juin 2008 à 14:46:24

                          Citation : DM5087

                          Comment on fait pour utiliser le texte saisie après, par exemple si on veut le ré-afficher ?
                          Merci


                          http://www.siteduzero.com/forum-83-253 [...] html#r2537369
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 juin 2008 à 14:55:32

                            j'ai un autre problème, quand j'appuie sur la touche 1, je peux écrire certes, mais qu'après que j'ai cliqué 1 fois sur la crois pour fermer le programme, comme si il y avait 2 programmes, mais le problème c'est que ça re-créée le texte que j'ai mis avant et l'image en arrière.... comment faire pour quand on veut fermer le programme on ai besoin de cliquer une seul fois et que ça ne répette pas le texte une fois quand j'appuie sur 1 ... (à chaque fois ça le re-créée une fois ...)

                            Merci !
                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 juin 2008 à 17:11:02

                              @DM5087: Gné? Désolé, je n'ai rien compris. De plus, ce sujet n'est pas supposé être pour poster à propos de toutes les erreurs dans le code dès que vous utilisez la bibliothèque.

                              Visiblement, ton problème n'a pas de lien avec la bibliothèque postée ici. Merci de faire un nouveau sujet pour demander de l'aide (en fournissant le code).

                              Cordialement,
                              Vhann.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 juin 2008 à 14:03:29

                                Bonjour,
                                J'ai lu les différents tuto sur cette page ainsi que la méthode pour compiler la bibliothèque, le problème c'est que j'ai toujours un problème quand je compile le main.c fourni :(
                                Il me met:
                                In function `SDL_main':
                                undefined reference to `SDL_InputCreer(long, SDL_Rect)'

                                undefined reference to `SDL_InputSaisir(SDL_Input*, SDL_Surface*, _TTF_Font*, SDL_Color*, SDL_Color*, SDL_INPUT_TYPE_TEXTE, int)'

                                undefined reference to `SDL_InputLiberer(SDL_Input*)'

                                Je ne sais pas quoi faire :(
                                Merci d'avance pour l'aide que vous pourrez m'apporter
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  22 juin 2008 à 14:05:42

                                  Tu a mi le SDL_Input dand ton dossier?
                                  Et a tu linker la lib?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    22 juin 2008 à 14:12:42

                                    Voila ce que j'ai fait:
                                    J'ai msi SDL input dans le dossier du projet ainsi que les differents fichiers .c associés.

                                    Linker la lib est pas évident car c'est un fichier .h qui n'est pas dans les fichiers "linkables"

                                    J'ai inclu ces fichiers à mon projet aussi, sans succès
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      22 juin 2008 à 14:22:05

                                      Citation : Pas de titre

                                      Linker la lib est pas évident car c'est un fichier .h qui n'est pas dans les fichiers "linkables"


                                      Pourquoi tu n'as pas compiler la lib sous forme libInput.a par exemple?
                                      Pour l'avoir fait je peu te dire que sa fonctionne parfaitement

                                      PS: un pti bravo au passage pour Vhann
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        22 juin 2008 à 14:41:56

                                        Je l'ai créé, mais le probleme c'est que la compilation me donne un fichier libSDL_input.a que je mets à l'interieur du dossier lib du compilateur. Je le link après. Mais toujours le même message...
                                        Je bug vraiment :) C'est afferux :) paronndez moi mon ignorance...
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          22 juin 2008 à 14:44:28

                                          la je vois pas attend que Vhann passe peut etre que lui sait
                                          Desoler de ne pouvoir t'aider
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            22 juin 2008 à 14:46:35

                                            Merci beaucoup pour tes propositions ;)
                                            J'essaierai d'attendre qu'il passe dans le coin :)
                                            Moi je continue à me casser le crane pour la faire marcher :)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              23 juin 2008 à 14:51:19

                                              personne n'a d'idée? :( depuis hier je n'arrete pas de me casser la tete a la faire marcher de toutes les manieres qui soient...
                                              Voila la derniere demarche que j'ai faite exactement:
                                              -J'ai mis les 3 fichiers: SDL_input.h SDL_inputGestion.c et SDL_inputAffichage.c dans un projet de bibliotheque dynamique. Dans cette meme bibliotheque j'ai linké la biblio SDL et j'ai compilé. Ca me donne juste un fichier .a
                                              Ce meme fichier je l'ai linké dans le projet ou j'utilise le main.c fourni. Quand je compile il me donne le message que j'ai marqué ci dessus.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                23 juin 2008 à 15:14:05

                                                @ShadowBuster: Essaie de créer un sous-dossier "SDL_input" dans le dossier où tu places le fichier du main (main.c en théorie).

                                                La directive d'inclusion aurait dû te l'indiquer: #include "SDL_input/SDL_input.h" :p .

                                                P.S.: Je vais voir s'il y moyen de compiler la bibliothèque (Windows et Linux) et de trouver un point de téléchargement pas trop pire aujourd'hui. Question de vous éviter cette peine ;) .

                                                Cordialement,
                                                Vhann
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  23 juin 2008 à 17:33:41

                                                  Même si l'idée que tu viens de me donner n'a toujours pas marché, merci pour tout Vhann... :)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    23 juin 2008 à 19:31:08

                                                    Essaie de juste mettre les fichiers dans le même dossier que le main.c et de compiler (pas de projet de bibliothèque, juste un projet normal).

                                                    Et si ça ne fonctionne pas, quelles sont les erreurs?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      23 juin 2008 à 21:49:39

                                                      ça donne exactement la même chose... Toujours un problème de "undefined reference" pour les fonctions de la biblio... :s
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        24 juin 2008 à 13:12:36

                                                        Bonjour,

                                                        J'aimerai savoir comment on fait pour changer la longueur de la chaine car bizarrement je ne peux écrire que 15 caractères (avec le '/0' ca doit faire une chaine de 16,non?)
                                                        Et aussi quel parti du code fait que des que j'appuie sur entrée le code disparait (bon il réapparait si on re-appuie) parce que justement je voudrais bien qu'il reste devant mes yeux moi ^^

                                                        AlasS
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          24 juin 2008 à 22:42:39

                                                          @ShadowBuster: C'est pourtant facile il me semble: dans le dossier du projet, tu places le main.c, dans ce même dossier, tu crées un sous-dossier SDL_input. Dans ce sous-dossier SDL_input tu crées les fichiers SDL_input.h, SDL_inputGestion.c et SDL_inputAffichage.c.

                                                          Une fois que c'est fait, tu copies-colles le
                                                          code ci-haut dans le fichier correspondant. Ensuite, tu compiles.

                                                          P.S.: Quand je te demandais les erreurs, je demandais un copier-coller du "build log" complet, pas un bout de message inexploitable.

                                                          P.P.S.: la SDL et SDL_ttf doivent être installées (et "link'ées" au projet) pour que cette bibliothèque puisse fonctionner en passant.

                                                          AlasSwolf: Est-ce que tu comprends le code du main() posté au moins? Sinon, j'ai posté la documentation qui pourra t'aider.

                                                          En passant, une chaîne contenant 15 caractères + un caractère de fin de chaîne '\0' (et non pas '/0' ;) ), ça fait effectivement 16 caractères, ce que l'on déclare, par exemple, ainsi:
                                                          "char string[ 15 ] = { 0 };".
                                                          Ce qui a pour effet de réserver 16 * sizeof( char ) octets en mémoire (tu peux tester en faisant sizeof( a ) ;) ).

                                                          Ensuite, pour garder le texte affiché à l'écran, il faut que tu gères ça toi-même, par exemple en affichant le contenu de SDL_input->chaine lorsque SDL_inputSaisir() redonne la main.

                                                          C'est à toi de trouver comment faire (allez, c'est facile :) ).

                                                          Cordialement,
                                                          Vhann
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            25 juin 2008 à 11:31:20

                                                            J'avais mal lu le main..... Désolé (je post pour rien c'est incroyable)
                                                            Bon bah je me lance à la conservation de la chaine. ;)

                                                            EDIT:


                                                            Bonjour,

                                                            Désolé de te déranger Vhann mais même après avoir lu et relu la doc et tout ton code, je ne vois toujours pas ce qui fait que quand saisieBloquante = 0 (donc appui sur la touche Entrée) et bah que la surface disparaisse de l'écran.

                                                            Si quelqu'un voit de quoi je parle qui me le dise.

                                                            AlasS
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              26 juin 2008 à 13:19:30

                                                              @vhann: J'ai suivi a la lettre tout ce qui est marqué... Et malgré mes tentatives, j'ai le même problème...
                                                              Voici comme tu l'as demandé le log:

                                                              ||===test, Debug ===|
                                                              obj\Debug\main.o||In function `SDL_main':|
                                                              D:\Documents and Settings\Shadow\Bureau\dernier test\main.cpp|50|undefined reference to `SDL_InputCreer(long, SDL_Rect)'|
                                                              D:\Documents and Settings\Shadow\Bureau\dernier test\main.cpp|68|undefined reference to `SDL_InputSaisir(SDL_Input*, SDL_Surface*, _TTF_Font*, SDL_Color*, SDL_Color*, SDL_INPUT_TYPE_TEXTE, int)'|
                                                              D:\Documents and Settings\Shadow\Bureau\dernier test\main.cpp|77|undefined reference to `SDL_InputLiberer(SDL_Input*)'|
                                                              ||=== Build finished: 3 errors, 0 warnings ===|

                                                              Je pense que c'est du au fait que j'utilise code::blocks 8.02 avec Mingw fourni...
                                                              C'est juste une hypothèse mais bon...
                                                              Merci de me répondre ;)
                                                              • 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