* НЕ ДУБЛИКАТ *, поскольку это относится только к C ++ и Windows.
(В настоящее время для Windows, но решение также подходит для Linux.)
У меня есть приложение, которое использует TextColor и / или TextBackground для выделения текста. Поскольку пользователь может изменять настройки консоли по умолчанию, я хотел бы иметь возможность читать эти цвета, чтобы я мог настроить цвет своих бликов так, чтобы они не смешивались с цветами пользователя.
Например, если пользователь выбрал желтый текст, я не хочу, чтобы моя подсветка тоже была желтой, или если фон пользователя красный, я не хочу, чтобы подсветка была красной и исчезала.
Я проверил RTL.PDF и не смог ничего найти. Но это руководство действительно длинное (2К + страниц), и я, возможно, пропустил его.
Мой вопрос: существуют ли функции, эквивалентные TextColor и TextBackground, которые вместо установки цветов возвращают текущие установленные значения? (Или, если не конкретные функции, возможно, какой-то другой метод, например получение всех параметров консоли, которые также содержат эту информацию о цвете.)
UPDATE:
После того, как меня «подтолкнули» разобраться с C ++ и изучить Windows API, я пошел и сделал все это:)
К счастью, я нашел несвязанный пример FreePascal для консольного вызова Windows API на форуме Lazarus, и, собрав все это вместе, я пришел к этому, который я публикую, так как уверен, что он будет полезен для других:
{$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. Кто-нибудь?