Revenir en debut de ligne en mode console

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
blamp1
Messages : 4
Inscription : ven. 15/juil./2005 13:19

Revenir en debut de ligne en mode console

Message par blamp1 »

Bonjour,

Je cherche en mode console a revenir au debut de la ligne.
Je ne veut pas utiliser consolelocate() et je me suis donc pencher vers ce cher chr(10).
Probleme, on dirait que les chr de 0 à 32 ne fonctionne pas mais renvoies des caracteres a la place.

exemple:

Code : Tout sélectionner

print ("a")
print (chr(10))
print ("b")
Le caractere 'b' devrait remplacer le caractere 'a'.
Au lieu de ca, j'ai un caractere entre les deux lettres.

Merci d'avance.
Dorian
Messages : 489
Inscription : mar. 15/mars/2005 15:33

Message par Dorian »

Utilise PrintN(), cette commande permet d'afficher du texte et de faire un retour à la ligne.

Code : Tout sélectionner

PrintN("a")
Print ("b")
blamp1
Messages : 4
Inscription : ven. 15/juil./2005 13:19

Message par blamp1 »

Excuse moi, j'ai du mal m'exprimer, je veux revenir au debut de la meme ligne. Je veut pas faire un simple retour chariot :)

D'ou mon probleme hehe :)
Merci quand meme pour ta reponse :)
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

blamp1,

Je suppose que le + simple est d'utiliser ConsoleLocate() pour réassigner le curseur à la position de ton choix.

Slts
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Je ne sais pas s'il existe une commande pour récupérer le Y en cours (voir aussi les userlib pour ca). De cette lière tu peux faire un locate au début de la ligne en cours

Dri
blamp1
Messages : 4
Inscription : ven. 15/juil./2005 13:19

Message par blamp1 »

Oui si je pouvais recuperer la position courante du curseur, l'utilisation de consolelocate serait envisageable, je vais jeter un oeil, merci :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

c'est pas tres dur !! :D

a chaque lettre tappé tu prend en compte le numero du charactere

pour avoir entrée "Dobro" il y a 5 lettres donc tu sait que le curseur est forcement en 6eme position !

il te suffit donc de faire un suivi de tous ce qui est ecrit a l'ecran , et pour positionner le curseur , etant donné que tu a pris soin de tout noter dans une variable chaine il te "suffi " d'effacer la console et de réecrire le text precedement sauvegardé , en mettant un "pseudo curseur"(cherche dans le code ascii) a l'emplacement voulu !!
c'est laborieux, mais pas impossible ! ... j'avais fait un screen saver immitant
le Dos en utilisant une maniere similaire en ce qui consiste l'affichage du curseur-bidon :D ..
RegisLG
Messages : 154
Inscription : mer. 22/juin/2005 2:32

Message par RegisLG »

Pour mon premier post, je te file une solution qui fonctionne :

Code : Tout sélectionner

Procedure myPrint(Text.s) 
; Print a Text to Console (Print) without End of Line 
  size.l=Len(Text) 
  bWritten.l 
  stdout.l = GetStdHandle_(#STD_OUTPUT_HANDLE) ; Get Console Standart Out 
  size =Len(Text) 
  If stdout 
    WriteConsole_(stdout,@Text,size, @bWritten, #Null) ;Write to Console 
  EndIf 
EndProcedure 

OpenConsole()
For i=1 To 15
 myPrint (Chr(13)+"PureBasic sait compter : "+Chr(7)+Str(i)) 
 Delay(1000)
Next
CloseConsole()
Tu peux aller dire un grand merci à PAMKKKKK sur le forum US (voir son code "Universal Message Requester") :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

la meme chose en plus court ! :D

Code : Tout sélectionner

OpenConsole()
For i=1 To 15
        ClearConsole() 
        Print("PureBasic sait compter : "+Str(i)) 
        Delay(1000)
Next
CloseConsole()
et en plus tu n'a personne a remercier ! si ce n'est Fred pour le Purebasic :D
RegisLG
Messages : 154
Inscription : mer. 22/juin/2005 2:32

Message par RegisLG »

mdr, bien vu Dobro (il manque le beep cependant ;)).
L'exemple que j'ai donné, c'est pour faire une démo du retour à la ligne (voir 1er post de ce sujet). C'est sur que s'il ne s'agit d'afficher qu'une seule ligne, hors contexte, ça sert pas à grand chose.

Si blamp1 veut utiliser le retour ligne, je présume qu'il a dans l'idée de se faire un petit utilitaire en mode console, et donc quand il lancera son utilitaire dans la console systeme (cmd) il n'a pas envie que l'affichage des commandes saisies auparavant disparaisse. Il ne faut donc pas effacer l'écran (sinon il faut aussi gérer le ré-affichage).
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

(sinon il faut aussi gérer le ré-affichage).
:D oui! c'est ce que je lui suggere un peu plus haut !!
tout gerer en gardant dans une variable chaines le contenu de la console
et gerer un pointeur dans cette variable chaine , pour gerer l'effacement d'un charactere , et ou la position du curseur ! .. :D

l'effacement de la consolle reindex le curseur en haut a gauche de l'ecran !
c'est une bonne base pour pouvoir redessiner en temps reel la console
dans mon exemple c'est ce a quoi sert l'effacement de la console AVANt
le reaffichage de la ligne !! :D
blamp1
Messages : 4
Inscription : ven. 15/juil./2005 13:19

Message par blamp1 »

Merci RegisLG et dobro :)
La fonction myprint me convient tres bien et j'arrive a faire ce que je veut.

Mais je trouve dommage que l'on doit passer par un stdout pour faire un vrai chr(13) en purebasic et je vois pas l'interet de les avoir modifié.
RegisLG
Messages : 154
Inscription : mer. 22/juin/2005 2:32

Message par RegisLG »

Je suis d'accord avec toi blamp1, je ne vois pas trop l'intérêt d'avoir modifié le comportement par "défaut" du print de base. Faudrait p'tet demandé à Fred le pourquoi du comment ;)

Par curiosité, il fait quoi ton utilitaire blamp1 ?

Sinon, Dobro j'avais bien compris ta technique. J'ai déjà utilisé ce type de gestion écran, c'était à l'époque du turbo pascal sous DOS, avec les mem[] qui permettaient de recopier la zone mémoire de l'écran dans une autre portion de mémoire et de la remapper ensuite, grosso modo un "doublebuffer".

Les deux solutions sont bonnes, suffit de savoir laquelle utiliser en fonction de ses besoins.
Répondre