begin process at 2012 05 29 13:08:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[C et Ncurses] Déplacement de curseur et Insertion de texte


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C et Ncurses] Déplacement de curseur et Insertion de texte

jeudi 2 décembre 2004 à 13:57:13 | [C et Ncurses] Déplacement de curseur et Insertion de texte

gulix

Dans le cadre d'un projet, je dois développer un éditeur de texte de type Vi. Pour cela, j'utilise la bibliothèque ncurses. J'arrive ainsi à gérer sans problèmes le curseur, à le déplacer, à insérer du texte, à supprimer des lignes, ...
Mais, lorsque j'insère du texte à la volée, j'ai un problème assez déconcertant : le texte se décale par endroits, et un retour à la ligne est observé (alors que l'insertion devrait s'arrêter). De plus, si j'insère à la volée sur plusieurs lignes, l'écart se présente souvent au même endroit.
Je vous livre ici le source, si quelqu'un voit ce qui pourrait m'aider, je l'en remercie d'avance...


#include <curses.h>
#include <signal.h>
#include "affichage.h"

int globalx;
int globaly;

////////////////////////////
// Initialise l'affichage //
////////////////////////////
void init_affichage()
{
(void) signal(SIGINT, arret_affichage);

(void) initscr();
keypad(stdscr, TRUE);
(void) nonl();
(void) cbreak();
(void) noecho();
globalx = 0;
globaly = 0;
}

////////////////////////////////////////////////
// Déplace le curseur à la position souhaitée //
////////////////////////////////////////////////
int dep_curseur(int x, int y)
{
int retour=0; // Renvoie 1 en cas de dépassement de coordonnées

if ((x>=COLS) || (y>=LINES) || (x<0) || (y<0)) retour=1;
else {
move(y,x);
globalx = x;
globaly = y;
refresh();
}
return retour;
}

/////////////////////////////////////////////////////
// Insere le caractere a la ligne l, en position x //
/////////////////////////////////////////////////////
int insereCar_affichage(char caractere, int ligne, int position)
{
int retour=0;
int ancienx=globalx;
int ancieny=globaly;

// On vérifie que l'on n'est pas en fin de ligne
if (1+position>=COLS) retour=1;
else {
// On affiche le caractère
dep_curseur(position, ligne);
//insch(caractere);
insch((char) (globalx/10) +'0');
dep_curseur(ancienx, ancieny);
refresh();
}
return retour;
}

//////////////////////////////////////
// Boucle principale de l'affichage //
//////////////////////////////////////
int affichage()
{
char chaineCar[2];
int i;
for(;;)
{
int c = getch();
case 'i': // insérer un texte au niveau du curseur
c=getch();
while ((c!='\e') && (globalx<COLS))
{
(void) insereCar_affichage((char) c, globaly, globalx);
(void) dep_curseur(globalx+1, globaly);
c=getch();
}
break;
case 'z': // arrêt de l'éditeur et enregistrement du fichier
return;
break;
default:
break;
}
}
}


static void arret_affichage(int sig)
{
endwin();
exit(0);
}

int main()
{
init_affichage();
affichage();
arret_affichage(0);
}


Pour compiler, je lance la commande suivante : gcc -lncurses affichage.c -o affichage


Cette discussion est classée dans : int, texte, affichage, void, curseur


Répondre à ce message

Sujets en rapport avec ce message

Snake tsssssssssss aidez moiiiiiiii [ par AmK ] Salut ,Je suis en train de coder un snake et la je crois avoir bien compris le principe de l'algo mais niveau code ça foire je sais pas pourquoi voila !!! Position du curseur !!! [ par yoyo269 ] Bonjour à toutes et à tous !Je cherche un moyen (en mode console sous Linux) de pouvoir placer le curseur là où je le voudrais.J'ai essayé avec ce cod petit problème d'affichage de texte [ par by_rabbit_08 ] Bonsoir!Enfait, j'ai un petit problème lors de l'utilisation d'un trackbar, créé (ou déclaré) avec CreateWindowEx.A chaque fois que l'on déplace le cu Affichage 0 et 1... [ par extremOne ] Bonjour à tous, voilà je débute un peu en langage C..Je me casse un peu la tete pour réaliser le jeu de la vie de Conway! J'ai fait des tas de recherc aide [ par achrafgassolina ] salut tout le monde la j ai une érreure et je c pas comment la resoudre dans la ligne 296:36 dans la condition if et aprés je veux faire la saisie des Problème d'affichage du texte dans ListBox et MessageBox [ par Sb01 ] Bonsoir à tous,J'ai un petit problème avec un programme que je n'arrive pas à résoudre...Lorsque je veux afficher du texte dans une listbox (avec un L affichage jeu mémory en sdl!!! [ par snakers07 ] bonjour, on m'a conseillé de mettre un nouveau post pour avoir de l'aide!!! voila mon probleme,je viens de programmer le jeu du mémory, mais en langag Aide, résolution d'un taquin [ par Micha1177 ] Bonjour, Dans le cadre d'un projet, je doit élaborer une grille de taquin résoluble, et pouvoir effectuer le déplacement des cases, et ensuite concev un pti prob ... :s help [ par meksoft002 ] Bonjour, c'est ma première participation en vue que vous pourrez resoudre mon problème ..voila...je vouderais mettre en oeuvre un tableau d'objets "pe Problème de tabeau dans un code orienté objet [ par Guiiil ] Bonsoir, je débute actuellement en C++ orienté objet et je suis bloqué avec ce programme qui doit réaliser un tableau d'élèves, prendre leur moyenne e


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales