【问题标题】:Create a Spinner in a Delphi Console在 Delphi 控制台中创建微调器
【发布时间】:2011-12-13 02:46:55
【问题描述】:

我正在尝试在 Delphi 控制台应用程序中创建微调器/等待光标。我可以做到,但我确信代码可以显着简化/改进。请原谅糟糕的代码:

Procedure PositionXY( x , y : Integer);
var
 hStdOut: HWND;
 ScreenBufInfo: TConsoleScreenBufferInfo;
 Coord1: TCoord;
 z: Integer;
 Begin
  sleep(100);
  hStdOut := GetStdHandle(STD_OUTPUT_HANDLE);
  GetConsoleScreenBufferInfo(hStdOut, ScreenBufInfo);
  Coord1.X := x;
  Coord1.Y := y;
  SetConsoleCursorPosition(hStdOut, Coord1);
 End;

begin
 while True do  begin
 Write('|');
  PositionXY(0,0);
 Write('/');
  PositionXY(0,0);
 Write('-');
  PositionXY(0,0);
 Write('\');
  PositionXY(0,0);
 end;
 ReadLn;
end.

提前致谢 保罗

【问题讨论】:

  • Mitpickers 的角落:hStdOut 不是 HWND,而只是 HANDLE/THandle。
  • 上面代码的一个明显问题是PositionXY 包含sleep(100) 是不合逻辑的。
  • 老斯库尔。 +1 控制台极客。

标签: delphi console-application


【解决方案1】:

根据给出的答案和反馈,我的解决方案。
感谢 Uwe 和 Christopher

const Frame: array[0..3] of char =  ('|','/','-','\');

var   i : Integer;

begin
 while True do  begin
  for i := 0 to Length(Frame)-1 do begin
  Write(Frame[i]+#8); Sleep(100);
 end;
  ///do something
 end;
    ReadLn;
end.

选择此选项可以更轻松地更改字符,即: Cooler ASCII Spinners?

【讨论】:

    【解决方案2】:

    使用你的代码我会稍微改变一下,

    Procedure WriteXY( x , y : Integer, s : string);
    var
     hStdOut: HWND;
     ScreenBufInfo: TConsoleScreenBufferInfo;
     Coord1: TCoord;
     Begin
      hStdOut := GetStdHandle(STD_OUTPUT_HANDLE);
      GetConsoleScreenBufferInfo(hStdOut, ScreenBufInfo);
      Coord1.X := x;
      Coord1.Y := y;
      Write(s);
      SetConsoleCursorPosition(hStdOut, Coord1);
     End;
    
    begin
     while True do  begin
      WriteXY(0,0,'|'); Sleep(100);
      WriteXY(0,0,'/'); Sleep(100);
      WriteXY(0,0,'-'); Sleep(100);
      WriteXY(0,0,'\'); Sleep(100);
     end;
     ReadLn;
    end.
    

    这让 WriteXY 对我来说比 PositionXY 更有用

    【讨论】:

      【解决方案3】:

      这可能会指导您进行一些优化:

      Write('|'#8); Sleep(100);
      Write('/'#8); Sleep(100);
      Write('-'#8); Sleep(100);
      Write('\'#8); Sleep(100);
      

      提示:#8 是退格键。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-09
        • 1970-01-01
        • 1970-01-01
        • 2023-02-08
        • 2011-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多