GotoXY实施

时间:2012-03-30 15:43:04

标签: delphi winapi delphi-xe windows-console

此问题是我之前发布的题为How to fix this procedure writing a string to the console screen buffer的后续问题。

我想在写一个任意字符串之前将光标设置到给定的(x,y)位置:

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

如何实施procedure GotoXY(x, y: integer)

2 个答案:

答案 0 :(得分:6)

快速谷歌揭晓

SetConsoleCursorPosition

答案 1 :(得分:3)

作为参考,这是我对问题的解决方案,基于JamesB的帖子(接受的答案):

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

  SetConsoleCursorPosition(hStdOut, CursorCoord);
end;

修改

上面提到的jamesB提到的page也指向另一个有趣的相关资源,即GetConsoleScreenBufferInfo function

在控制台屏幕缓冲区中获取光标的列和行坐标也是我的要求的一部分。

以下是我根据引用资源编写的2个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;