Реализация GotoXY - PullRequest
       12

Реализация GotoXY

2 голосов
/ 30 марта 2012

Этот вопрос является продолжением моего предыдущего поста под названием Как исправить эту процедуру, записав строку в буфер экрана консоли .

Я хочу установить курсор в заданную (x, y) позицию до написания произвольной строки:

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

Как можно реализовать procedure GotoXY(x, y: integer)? 1009 *

Ответы [ 2 ]

6 голосов
/ 30 марта 2012

Быстрый Google показывает

SetConsoleCursorPosition

3 голосов
/ 30 марта 2012

Для справки, это мое решение вопроса, основанное на посте JamesB (принятый ответ):

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

  SetConsoleCursorPosition(hStdOut, CursorCoord);
end;

Edit:

Страница , на которую ссылается jamesB выше, также указывает на другой интересный связанный ресурс, а именно GetConsoleScreenBufferInfo function .

Получение координат столбца и строки курсора в экранном буфере консоли также является частью моих требований.

Вот две функции Delphi, которые я написал на основе цитируемого ресурса:

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;
...