超赞控制台函数

//
      
      
//      Console function & procedure
      
      
//
      
      

   
   
    
     
   
   
function xUtilClass.IsOnConsole: Boolean; stdcall;
     
     
{  判断程序是否是在控制台下面运行,
      
      
还是单独直接打开,
      
      
必须在程序的第一行调用本函数
      
      
并且保存返回的值,否则可能判断发生错误!}
      
      
var sbi: TConsoleScreenBufferInfo;
     
     
    h: THandle; begin
      
      
    h := GetStdHandle(STD_OUTPUT_HANDLE);
     
     
    GetConsoleScreenBufferInfo(h, sbi);
     
     
    result := not (sbi.dwCursorPosition.X > 0) and (sbi.dwCursorPosition.Y > 0);
     
     
end;
     
     

   
   
    
     
   
   
function EnableEcho(const Enable: Boolean): Cardinal; stdcall;
     
     
{  指定是否回显输入的字符,
      
      
例如需要输入密码,
      
      
不需要显示的情况
      
      
EnableTrue,回显,False,不回显  返回值:
      
      
返回被修改前的控制台模式}
      
      
var
      
      
    StdHandle: THandle;
     
     
begin
      
      
    StdHandle := GetStdHandle(STD_INPUT_HANDLE);
     
     
    if StdHandle = INVALID_HANDLE_VALUE then Exit;
     
     
    GetConsoleMode(StdHandle, result);
     
     
    if Enable then
      
      
        SetConsoleMode(StdHandle, result or ENABLE_ECHO_INPUT)
     
     
    else
      
      
        SetConsoleMode(StdHandle, result and not ENABLE_ECHO_INPUT);
     
     
end;
     
     

   
   
    
     
   
   
procedure ClearScreen;
     
     
{  清屏}
      
      
var sbi: TConsoleScreenBufferInfo;
     
     
    h: hwnd; Cord: _COORD;
     
     
    R: Cardinal; begin
      
      
    h := GetStdHandle(STD_OUTPUT_HANDLE);
     
     
    GetConsoleScreenBufferInfo(h, sbi);
     
     
    Cord.X := 0;
     
     
    Cord.Y := 0;
     
     
    FillConsoleOutputCharacter(h, ' ', sbi.dwSize.X * sbi.dwSize.Y, Cord, R);
     
     
    SetConsoleCursorPosition(h, Cord);
     
     
end;
     
     

   
   
    
     
   
   
function KeyPressed: Char;
     
     
{  判断是否有任意键(不包括功能键!)按下,返回按下的键的字符}
      
      
var Console: Cardinal;
     
     
    OldMode: Cardinal;
     
     
    BufferSize: Cardinal;
     
     
begin
      
      
    Console := GetStdHandle(STD_INPUT_HANDLE);
     
     
    GetConsoleMode(Console, OldMode);
     
     
 { 获取原模式 }
      
      
    SetConsoleMode(Console, OldMode and not (ENABLE_LINE_INPUT or ENABLE_ECHO_INPUT));
     
     
    ReadConsole(Console, @result, 1, BufferSize, nil);
     
     
    SetConsoleMode(Console, OldMode);
     
     
{ 恢复原来模式 }
      
      
end;
     
     

   
   
    
     
   
   
procedure PressAnyKey;
     
     
{  提示按任意键继续!}
      
      
const PressAnyKey = 'Press any key to continue...';
     
     
var BufferSize: Cardinal;
     
     
begin
      
      
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), PChar(PressAnyKey), Length(PressAnyKey), BufferSize, nil);
     
     
    KeyPressed;
     
     
end;
     
     

   
   
    
     
   
   
procedure GotoXY(X, Y: Word);
     
     
{  移动输入光标焦点到指定的坐标范围}
      
      
var
      
      
    Coord: _COORD;
     
     
begin
      
      
    Coord.X := X;
     
     
    Coord.Y := Y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Coord);
     
     
end;
     
     

   
   
    
     
   
   
function WhereXY: TCoord;
     
     
{  获取当前光标位置}
      
      
var Info: _CONSOLE_SCREEN_BUFFER_INFO;
     
     
begin
      
      
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), Info);
     
     
    result := Info.dwCursorPosition;
     
     
end;
     
     

   
   
    
     
   
   
function WhereX: SmallInt;
     
     
{  返回当前光标X坐标:结果范围 0~25}
      
      
begin result := WhereXY.X;
     
     
end;
     
     

   
   
    
     
   
   
function WhereY: SmallInt;
     
     
{  返回当前光标Y坐标:结果范围 0~80}
      
      
begin
      
      
    result := WhereXY.Y;
     
     
end;
     
     

   
   
    
     
   
   
function SetColor(Color: Word): DWORD;
     
     
{  设置输出文本颜色}
      
      
var
      
      
    Info: CONSOLE_SCREEN_BUFFER_INFO;
     
     
begin
      
      
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), Info);
     
     
    result := Info.wAttributes;
     
     
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Info.wAttributes or Color);
     
     
end;
     
     
 转自 DelphiFans
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值