Page 1 sur 1

Revenir en debut de ligne en mode console

Publié : ven. 15/juil./2005 13:26
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.

Publié : ven. 15/juil./2005 14:10
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")

Publié : ven. 15/juil./2005 14:25
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 :)

Publié : ven. 15/juil./2005 16:10
par fweil
blamp1,

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

Slts

Publié : ven. 15/juil./2005 17:05
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

Publié : lun. 18/juil./2005 9:24
par blamp1
Oui si je pouvais recuperer la position courante du curseur, l'utilisation de consolelocate serait envisageable, je vais jeter un oeil, merci :)

Publié : mar. 19/juil./2005 18:35
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 ..

Publié : mer. 20/juil./2005 20:21
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") :)

Publié : mer. 20/juil./2005 22:29
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

Publié : mer. 20/juil./2005 23:10
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).

Publié : jeu. 21/juil./2005 18:26
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

Publié : ven. 22/juil./2005 10:44
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é.

Publié : ven. 22/juil./2005 12:28
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.