注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

珠海渔郎之电子网档

项目管理 + 程序开发 + Delphi + 电脑应用 + 数码 + 进化感悟

 
 
 

日志

 
 

常见的控制台函数  

2009-11-25 13:41:45|  分类: Delphi |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

//////////////////////////////////////////////////////////////////////////////
// Console function & procedure
//////////////////////////////////////////////////////////////////////////////

function 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;
{
指定是否回显输入的字符,例如需要输入密码,不需要显示的情况
Enable:True,回显,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;

 

 

  评论这张
 
阅读(628)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017