2012-03-30 5 views
1

Diese Frage ist eine Follow-up zu meinem früheren Beitrag mit dem Titel How to fix this procedure writing a string to the console screen buffer.GotoXY Implementierung

ich den Cursor auf einem bestimmten (x, y) Position vor dem Schreiben eine beliebige Zeichenfolge festlegen möchten:

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

Wie procedure GotoXY(x, y: integer) umgesetzt werden können?

+0

Die Frage ist, warum Sie verwenden [ 'WriteFile'] (http://stackoverflow.com/questions/9946039/how-to-fix-this-procedure-Schreiben-ein-String-to-the-Konsole-Bildschirm-Puffer) zum Schreiben auf die Konsole. Verwenden Sie die Konsolen-APIs, z. 'WriteConsole' und Freunde. –

+0

@David Heffernan: Danke: len: = Länge (n); WriteConsole (hStdOut, @s [1], len, len, nil); macht den Job. – menjaraz

+0

Denken Sie daran, dass, wenn stdout in eine Datei umgeleitet wird, WriteConsole fehlschlägt. –

Antwort

6

Eine schnelle Google enthüllt

SetConsoleCursorPosition

+0

Danke, dass du es mir zeigst. Tatsächlich gibt es einen Hinweis darauf in der ** Windows.pas ** -Einheit und ich vermisse es. – menjaraz

2

als Referenz, das ist meine Antwort auf die Frage, bezogen auf JamesB der Post (die akzeptierte Antwort):

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

    SetConsoleCursorPosition(hStdOut, CursorCoord); 
end; 

Edit:

Die page, auf die oben von jamesB verwiesen wird, zeigt auch auf eine andere interessante verwandte Ressource, nämlich GetConsoleScreenBufferInfo function.

Das Abrufen der Spalten- und Zeilenkoordinaten des Cursors in der Konsole Bildschirmpuffer ist auch Teil meiner Anforderungen.

Hier sind die 2 Delphi Funktionen, die ich geschrieben auf die zitierte Ressource basierend haben:

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 für die Rückkehr mit etwas Code. –

+0

@ François: Gern geschehen. – menjaraz