Salut , j ai problème je n arrive pas a écrire à la suite :
J appuis sur "a" je la supprime, mais je bloc juste après, pour faire apparaitre une nouvelle lettre (alphabet).
J utilise une police.
Salut , j ai problème je n arrive pas a écrire à la suite :
J appuis sur "a" je la supprime, mais je bloc juste après, pour faire apparaitre une nouvelle lettre (alphabet).
J utilise une police.
J'ai pas vraiment compris ton problème,peut tu être plus précis ?
La je suis obligé de faire une supposition,tu utilise les évènement et tu veux faire comme le bloc-note par exemple pouvoir écrire un texte ?J appuis sur "a" je la supprime, mais je bloc juste après, pour faire apparaitre une nouvelle lettre (alphabet).
Une façon étrange de dire que tu utilise la lib SDL_ttf ? x)J utilise une police.
Désolé, j ai oublié quelques lettres, ce que je faire, comme le logiciel de traitement de texte, avec (espace, retour en arrière et bien sur les lettres.
Je suis obliger de recompilé, pour avoir la lettre que je désire.
Il est difficile de te lire ,tu oublie des mots et ton orthographe n'est pas terrible.
Sinon refaire un logiciel de traitement de texte ,la SDL n'est pas vraiment approprié pour faire cela ,c'est plutôt intéressant a faire mais si ton but est de ne pas te cassé la tête je te conseille une autre lib GTK ou Qt.
Sinon je vois pas ou tu bloque exactement
Tu récupères les touche tapé dans un tableau (qui doit être une chaine de caractères) et puis tu l'affiche avec les fonctions SDL.
Le mieux c'est de vérifié la chaine de caractères avant affichage pour pouvoir géré les retour a la ligne et donc pouvoir modifié la position.
Pareil pour la modification de ce texte ,les touches peuve aussi servir a déplacé un curseur fictif dans ce tableau.
Même logique pour enlevé un caractère.
Je précise au cas ou mais tu devra créer plusieurs fonction.
Salut excusais mois de mon orthographe , j ais réussi a changer mon clavier qwerty, j arrive a écrire de "a" jusque à "z" plus les supprimées, mais je n arrive à tapé n importe quels lettres et l effacée .
Es ce que je doit incrémenter chaque lettres.
Je ne comprend pas , tu dis que tu as réussi a ecrire de 'a' a 'z' et de les supprimé.
Puis après tu dis que tu n'arrive pas a tapé n'importe quel lettre et effacé , c'est un peu contradictoire ^^'
Apres ça dépend ce que tu appelle incrémentais chaque lettre.
j'imagine que je dois encore supposé ce que tu essaye de dire ,tu n'arrive pas a écrire les majuscule et les chiffre et autre caractère ?
Pour la logique du code grosso modo:
Initialisation:
pour les évènements
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int i,l; char chaine[100]; chaine[0] = '\0'; //c'est une chaîne de caractère l = 0;
Bon pour la condition c'est si on appuie pas sur la touche 'effacé' bon le plem c'est que il affichera les toche qui ne sont pas des caractere (fleche directionel F1,F2 ects) donc je te laisse faire les condition x)
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 case SDL_KEYDOWN: for(i=0;i<325;i++) { if(event.key.keysym.sym == i) { if(SDLK_BACKSPACE != i) { chaine[l] = i; chaine[l+1] = 0; l++; }else { l--; chaine[l] = 0; } } } break;
Tu pourrais ecrire aussi
bon faudra rajouté pareil pour les chiffre et les autres caractères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if( (i >= 'a') && (i <= 'z') )
Le must c'est de créer une structure , et de mettre les évènement dans une fonction , pour la lisibilité du code, et sa portabilité.
Je me suis mal explique, un exemple si je commence a écrire un mot "avec" , et si je me trompe sur la lettre "v" et je met "b", je corrige mon erreur et je met "v".
Et j aimerais faire ça pour la touche espace.
Un bout de mon 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 case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_a: //touche a positionLettreEcrite[1].x = 58; positionLettreEcrite[1].y = 40; SDL_BlitSurface(lettreEcrite[1], NULL, ecran, &positionLettreEcrite[1]); positionLettreEcrite[2].x = 40; positionLettreEcrite[2].y = 60; SDL_BlitSurface(lettreEcrite[2], NULL, ecran, &positionLettreEcrite[2]); positionLettreEcrite[3].x = 48; positionLettreEcrite[3].y = 50; SDL_BlitSurface(lettreEcrite[3], NULL, ecran, &positionLettreEcrite[3]); break; case SDLK_b: //touche b positionLettreEcrite[4].x = 58; positionLettreEcrite[4].y = 40; SDL_BlitSurface(lettreEcrite[4], NULL, ecran, &positionLettreEcrite[4]); positionLettreEcrite[5].x = 40; positionLettreEcrite[5].y = 60; SDL_BlitSurface(lettreEcrite[5], NULL, ecran, &positionLettreEcrite[5]); break; case SDLK_BACKSPACE: // touche effacer if(i-1) i++; { // effacer a SDL_FillRect(lettreEcrite[1], NULL, SDL_MapRGB(ecran->format, 220, 205, 162)); SDL_BlitSurface(lettreEcrite[1], NULL, ecran, &positionLettreEcrite[1]); SDL_FillRect(lettreEcrite[2], NULL, SDL_MapRGB(ecran->format, 220, 205, 162)); SDL_BlitSurface(lettreEcrite[2], NULL, ecran, &positionLettreEcrite[2]); SDL_FillRect(lettreEcrite[3], NULL, SDL_MapRGB(ecran->format, 220, 205, 162)); SDL_BlitSurface(lettreEcrite[3], NULL, ecran, &positionLettreEcrite[3]); if(i == 2) { // effacer b SDL_FillRect(lettreEcrite[4], NULL, SDL_MapRGB(ecran->format, 220, 205, 162)); SDL_BlitSurface(lettreEcrite[4], NULL, ecran, &positionLettreEcrite[4]); SDL_FillRect(lettreEcrite[5], NULL, SDL_MapRGB(ecran->format, 220, 205, 162)); SDL_BlitSurface(lettreEcrite[5], NULL, ecran, &positionLettreEcrite[5]);
Justement je te déconseille d'utilisé cette méthode (de bourrin).
Mais plus t'utilisé ceci :
Et ton tableau 'chaine' et modifié par le code plus haut que je t'ai montré.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 image = TTF_RenderText_Blended(police,chaine,couleur); SDL_BlitSurface(image,NULL,ecran,&position); SDL_FreeSurface(image);
Sauf si bien sur tu n'utilise pas de police mais une image (genre comme ça) mais le principe est le meme.
tu créer une fonction genre affiche_texte , et qui en rapport a la chaine de caractere la fonction affiche la bonne lettre.
Il faudra donc 2 images une pour affichée (imageAfficheA), et une pour effacée (imageEffaceA). Je doit mettre une image de fond aussi ? Par contre j utilise que 23 lettres il n y a pas w x y.
Moi je te déconseille de faire cela , vu que c'est pas vraiment gérable.
Dans le code que je t'ai montré , il affiche la chaîne de caractère.
Il faudra effectivement rafraîchir image ('effacé'),enfin en parle plutot de redesinné image.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SDL_Surface *image; image = TTF_RenderText_Blended(police,chaine,couleur); SDL_BlitSurface(image,NULL,ecran,&position); SDL_FreeSurface(image);
en dessine le fond , puis celui du texte a chaque boucle.
ce n'est pas un problème pour affichée le texte que tu veux comme mis plus haut , je te laisse choisir les conditions.
OK merci, je vais tester ça tout à l'heure chez moi. Je te tiens au courant.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager