* NOT A DUPLICATE *,因为它仅指C ++和Windows。
(当前用于Windows,但也首选用于Linux的解决方案。)
我有一个使用TextColor和/或TextBackground突出显示某些文本的应用程序。因为用户可以更改控制台的默认设置,所以我希望能够读取这些颜色,以便可以调整突出显示的颜色以使其不与用户的颜色融合。
例如,如果用户选择了黄色文本,我不希望我的突出显示也为黄色,或者如果用户的背景为红色,则我不希望突出显示为红色并消失。
我检查了RTL.PDF,找不到任何东西。但是那本手册真的很长(超过2K页),我可能错过了。
我的问题:是否有与TextColor和TextBackground等效的函数,而不是设置颜色,而是返回当前设置的值? (或者,如果不是特定功能,也许还有其他方法,例如获取也包含此颜色信息的所有控制台参数。)
更新:
被“推”去处理C ++之后,去研究Windows API,我去做了所有的事情:)
幸运的是,我在Lazarus论坛中找到了一个与控制台Windows API调用无关的FreePascal示例,并将所有这些放在一起,我提出了这个建议,因为我确信它对其他人将是有用的:>
{$mode fpc}
Unit Console;
Interface
uses Windows, SysUtils;
function GetTextColor: Byte;
function GetTextBackground: Byte;
Implementation
////////////////////////////////////////////////////////////////////////////////
function GetColors: Byte;
var
vHandle :THandle;
vScreenBufInfo :TConsoleScreenBufferInfo;
begin
vHandle := GetStdHandle(STD_OUTPUT_HANDLE);
if vHandle = INVALID_HANDLE_VALUE then RaiseLastOSError;
GetConsoleScreenBufferInfo(vHandle,vScreenBufInfo);
GetColors := vScreenBufInfo.wAttributes;
end;
////////////////////////////////////////////////////////////////////////////////
function GetTextColor: Byte;
begin
GetTextColor := GetColors and $0F;
end;
////////////////////////////////////////////////////////////////////////////////
function GetTextBackground: Byte;
begin
GetTextBackground := GetColors shr 4 and $0F;
end;
////////////////////////////////////////////////////////////////////////////////
begin
//Writeln('TextColor : ',GetTextColor);
//Writeln('BackgroundColor: ',GetTextBackground);
end.
不过,我仍在寻找Linux解决方案。有人吗?