Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/12/2007, à 19:20

MéPHiST

[resolu]placer un caractere sur l'ecran (position précise)

Bonjour,


Je suis en train de developper un petit programme en C sous linux (gcc4.2) et je cherche à  placer un caractere à  une position presice de mon 'ecran'/terminal.

est-ce que vous savez comment faire?

(j'ai essayé des gotxy, des mvprintw, des locatxy mais tout ceci est pour windows tongue)

merci d'avance!

Dernière modification par MéPHiST (Le 31/12/2007, à 12:07)


Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent  sans rien faire. A.Einstein

Hors ligne

#2 Le 30/12/2007, à 20:01

Link31

Re : [resolu]placer un caractere sur l'ecran (position précise)

On fait normalement ça avec la bibliothèque ncurses. Mais une implémentation du conio.h de windows (en utilisant ncurses) existe aussi.

Hors ligne

#3 Le 31/12/2007, à 10:42

all

Re : [resolu]placer un caractere sur l'ecran (position précise)

petite technique à  l'ancienne :

en ligne de commande la commande tput cup x y permet de placer le curseur à  l'emplacement x y du terminal. (ou y x, j'avoue que je ne me rapelle plus trop)


Faire une redirection de cette commande dans un fichier.

tput cup 15 10 > temp

Aller voir à  la main dans le fichier la syntaxe du "blob" correspondant

vim temp
^[[16;11H

par contre là  faut voir quand meme avec votre shell, parceque là  je fais ça sous cygwin donc c'est un peu bizarre.

puis dans le code c, faire simplement un printf avec les bons parametres

int x = 5;
int y =6;
printf("\[%d,%dH",x,y);

je garantie pas que le code fonctionne, ça fait longtemps que j'ai plus fait de C.

Cordialement,

all

Hors ligne

#4 Le 31/12/2007, à 11:10

Sysko le prospecteur

Re : [resolu]placer un caractere sur l'ecran (position précise)

Sinon   je confirme qu'avec la libncurses (  ncurses.h ) tu devrais pouvoir le faire ,  je viens de devel  une appli entière  en utilisant  que   ncurses et les bibli  rattaché ( menu.h / form.h et tout leur amis ^^)

donc  pour  mettre une chaine  sur le terminal  , c'est bel  et bien  mvprintw ( int  y , int x , char*  ma_chaine )
d'ailleurs  c'est la qu'il faut faire attention c'est que toute les fonctions de ncurses  prennent d'abord la valeur   y  et ensuite la valeur  x  et non le contraire comme on a l'habitude en mathematique

voila   sinon  si tu  recontre d'autre problème  avec  ncurses n'hésite  je viens de passer deux semaines non  stop  dessus   donc  j'ai  eu le temps de faire toute les erreurs possibles et imaginables

cordialelement

sinon all  de toute mainère  ncurses  ne fait  que  utiliser les codes d'échappement comme 
^[[16;11H
il  permet juste  à  l'utilisateur de ne  pas avoir à  les  connaitres


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne

#5 Le 31/12/2007, à 11:27

all

Re : [resolu]placer un caractere sur l'ecran (position précise)

Surement, je me suis jamais penché sur ncurses,

l'avantage que peux avoir mon hint, c'est que si il veut simplement placer un ou deux truc à  l'écran, ça lui évite une library. Je sais qu'il faut eviter de réinventer la roue mais bon, parfois, pour des petits trucs simple...

Hors ligne

#6 Le 31/12/2007, à 11:28

MéPHiST

Re : [resolu]placer un caractere sur l'ecran (position précise)

Merci pour votre aide mais j'avoue que je n'ai pas tout saisi...
mon niveau en C en reste au µc donc passer à  un language aussi evolué...

j'ai essayé d'utiliser un mwprintf comme ceci:

mvprintw ( 5 , 8 , "test" );

mais mon pc me retourne:

essai.c: In function «main":
essai.c:65: attention : passing argument 3 of «mvprintw" makes pointer from integer without a cast
/tmp/cc2nTlhM.o: In function `main':
essai.c:(.text+0x1ff): undefined reference to `mvprintw'
essai.c:(.text+0x246): undefined reference to `mvprintw'
collect2: ld a retourné 1 code d'état d'exécution

(en fait concretement je dois faire un programme qui reçoit/emet des données depuis des sondes rs232 et places (après traitement) ces information dans une case de l'ecran reservé à  la sonde (près de 70) donc si vous voyez comment faire...)


merci beaucoup de votre aide!


Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent  sans rien faire. A.Einstein

Hors ligne

#7 Le 31/12/2007, à 11:37

Sysko le prospecteur

Re : [resolu]placer un caractere sur l'ecran (position précise)

hum  tu iniatilise correctement ncurses dans ton main

int main()
{

        // on initialise ncurses
        initscr();
        cbreak();
        noecho();
        keypad(stdscr, TRUE);

        // ton code  



        // on  ferme  ncurses
        endwin();

        return 0 ;
}

et est ce que  link  bien avec la bibliothèque ncurses car  si  tu  a  une "undefined reference to"  c'est surement que tu  a  oublié de linker  ,   après  je ne sais pas si tu passe par  un makefile ou un ide

Dernière modification par Sysko le prospecteur (Le 31/12/2007, à 11:39)


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne

#8 Le 31/12/2007, à 11:48

MéPHiST

Re : [resolu]placer un caractere sur l'ecran (position précise)

euh....

là  je dois avouer que je suis completement perdu!
pour compiler je fais tout simplement gcc nom_du_fichier.c -o nom_du_prog.
maintenant j'ai encore plus d'erreurs!

mephisto@mephisto:~/Desktop/prog temperature$ gcc essai.c -o essai
essai.c: In function «main":
essai.c:74: attention : passing argument 3 of «mvprintw" makes pointer from integer without a cast
/tmp/ccLuUZlt.o: In function `main':
essai.c:(.text+0x44): undefined reference to `initscr'
essai.c:(.text+0x49): undefined reference to `cbreak'
essai.c:(.text+0x4e): undefined reference to `noecho'
essai.c:(.text+0x53): undefined reference to `stdscr'
essai.c:(.text+0x63): undefined reference to `keypad'
essai.c:(.text+0x223): undefined reference to `mvprintw'
essai.c:(.text+0x26a): undefined reference to `mvprintw'
essai.c:(.text+0x28a): undefined reference to `endwin'
collect2: ld a retourné 1 code d'état d'exécution

Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent  sans rien faire. A.Einstein

Hors ligne

#9 Le 31/12/2007, à 11:49

Sysko le prospecteur

Re : [resolu]placer un caractere sur l'ecran (position précise)

ok  c'est normal

rajoute -lncurses à  la ligne de gcc

sa devrait aller  mieux


car en fait  rajouter   -lncurses va  dire au compilateur de lier aussi  avec la  bibli     lincurses.so
sinon   sans cela  ton compilateur  ne  connaitra pas  toutes  les fonctions  marqué en undefinied,  vu qu'elle sont defini  dans  libncurses

Dernière modification par Sysko le prospecteur (Le 31/12/2007, à 11:51)


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne

#10 Le 31/12/2007, à 11:56

MéPHiST

Re : [resolu]placer un caractere sur l'ecran (position précise)

La compilation se passe beaucoup mieu (pas d'erreurs de compilation) mais rien n'apparait à  l'ecran...

mephisto@mephisto:~/Desktop/prog temperature$ ./essai 
mephisto@mephisto:~/Desktop/prog temperature$

pourtant j'ai bien mvprintw ( 5 , 8 , "test" ); dans mon code...


Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent  sans rien faire. A.Einstein

Hors ligne

#11 Le 31/12/2007, à 12:00

Sysko le prospecteur

Re : [resolu]placer un caractere sur l'ecran (position précise)

ah oui  erreur frequente aussi 


en  fait  ce qu'il se passe  ,
pour  ncurses  ecrit  sur des WINDOW   ,  et  pas directement  sur l'écran  de ton terminal  ,cela  te permet  de  gerer  plusieurs ecran  , des sous ecrans  etc....   ce qui permet de faire des truc  plutot  beau  et ordonné   meme pour du  terminal

mais ne t'inquiète pas  si  aucune  fenetre n'es spécifié  ncurses écrira sur la fentre standard    , 
sauf qu'ensuite   cette fenetre il faut l'afficher
et on l'affiche   avec  la fonction

refresh() ;

et on rajoute  un

getch () ; 

pour laisser le programme  tourné  jusqu'à ce qu'on appui sur une touche

voili  à présent cela devrait être mieux

Dernière modification par Sysko le prospecteur (Le 31/12/2007, à 12:02)


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne

#12 Le 31/12/2007, à 12:06

MéPHiST

Re : [resolu]placer un caractere sur l'ecran (position précise)

magnifique!

résumé pour quelqu'un d'autre qui aurait le même pbm:

pour afficher à  un endroit precis de l'ecran dans une 'fenetre' voici le code:

#include <ncurses.h>



main (void)
{
//initialisations ncurses
        initscr();
        cbreak();
        noecho();
        keypad(stdscr, TRUE);

//code
		mvprintw ( 5 , 8 , "test" );


//rafraichisement de la fenetre
		refresh() ;
//fermeture ncurses
        endwin();


}

ne pas oublier de mettre -lncurses dans la ligne de gcc (pour la compilation)
ex: nom_fichier_c -o nom_du_prog -lncurses



Merci beaucoup pour votre patience Sysko le prospecteur!

Dernière modification par MéPHiST (Le 31/12/2007, à 12:09)


Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent  sans rien faire. A.Einstein

Hors ligne

#13 Le 31/12/2007, à 12:12

Sysko le prospecteur

Re : [resolu]placer un caractere sur l'ecran (position précise)

de rien  on es  toujours  content de pouvoir  faire profiter  aux autres ce que l'on sait

ensuite  si  tu veux  faire des truc un  peu  plus beau n'hesite pas  à  demander ,  c'es avec joie  que  je  te dirais  comment faire


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne