2012-03-30 1 views
1

Cette question fait suite à mon précédent article intitulé How to fix this procedure writing a string to the console screen buffer.Mise en œuvre de GotoXY

Je veux placer le curseur sur une position donnée (x, y) avant d'écrire une chaîne arbitraire:

GotoXY(x,y) 
SendLn('The harder they come...'); 

Comment peut-on procedure GotoXY(x, y: integer) mis en œuvre?

+0

La question est pourquoi vous utilisez [ 'WriteFile'] (http://stackoverflow.com/questions/9946039/how-to-fix-this-procedure-writing-a-string-to-the-console-screen-buffer) pour écrire sur la console. Utilisez les API de console, par ex. 'WriteConsole' et amis. –

+0

@David Heffernan: Merci: len: = Longueur (s); WriteConsole (hStdOut, @s [1], len, len, nil) Fait le travail. – menjaraz

+0

N'oubliez pas que si stdout est redirigé vers un fichier, WriteConsole échouera. –

Répondre

6

Un rapide Google révèle

SetConsoleCursorPosition

+0

Merci de me l'indiquer. En effet, il y a une référence dans l'unité ** Windows.pas ** et elle me manque. – menjaraz

2

Pour référence, voici ma solution à la question, basée sur le poste de JamesB (la réponse acceptée):

procedure GotoXY(x, y: Integer); 
var 
    CursorCoord: _COORD; 
begin 
    CursorCoord.x := x; 
    CursorCoord.y := y; 

    SetConsoleCursorPosition(hStdOut, CursorCoord); 
end; 

Edit:

Le page référencé par jamesB ci-dessus indique également une autre ressource connexe intéressante, à savoir GetConsoleScreenBufferInfo function. Obtenir les coordonnées colonne et ligne du curseur dans le tampon de l'écran de la console fait également partie de mes exigences.

Voici les 2 fonctions Delphi J'ai écrit sur la base ressource citée:

var 
    Buffer: _Console_Screen_Buffer_Info; 

... 

function WhereX: Integer; 
begin 
    GetConsoleScreenBufferInfo(hStdOut,Buffer); 
    // 
    Result:=Buffer.dwCursorPosition.X; 
end; 

function WhereY: Integer; 
begin 
    GetConsoleScreenBufferInfo(hStdOut,Buffer); 
    // 
    Result:=Buffer.dwCursorPosition.Y; 
end; 
+0

+1 pour revenir avec du code. –

+0

@ François: De rien. – menjaraz