![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Цвет текста в консолном приложении [D6, WinXP]
Artemka © (2004-10-05 01:30:00)Очень терзает меня такой вопрос: как в консольном приложении сменить цвет символов? Без ассемблера не обойтись?
panov (2004-10-05 19:02:00) [1]>П7 (05.10.04 16:17) [9]
Свои вопросы в других ветках.
П7 (2004-10-05 16:17:00) [2]И ещё вот, когда выводишь символы с помощью WriteConsole, то он автоматически делает перевод каретки на новую строку. Как выводить символ так, чтобы курсор оставался на месте?
П7 (2004-10-05 16:08:00) [3]Мастера, ну очень нужно, подскажите... (:
П7 (2004-10-05 15:39:00) [4]Ясно, единственный нормальный способ решения этой проблемы, который я сейчас вижу, это хранение всей текстовой информации в отдельном файле в DOS кодировке.
У меня возникла проблема с вводом. Взял из статьи исходник функции ввода, у меня олна выглядит вот так:
function P7Console.Read() : string;
var
a : byte;
Wr : Cardinal;
// InpStr объявлена в самом классе, как и hInp
begin
repeat
a := 0;
WaitForSingleObjectEx( hInp, INFINITE, True );
ReadConsole( hInp, @a, 1, Wr, nil );
if a > 31 then
InpStr := InpStr + chr(a);
if a = 8 then
begin
Delete( InpStr, Length( InpStr ), 1 );
if Length( InpStr ) > 0 then
WriteConsole( hOut, @BckSpSeq, Length(BckSpSeq), Wr, nil );
end
else
WriteConsole( hOut, @a, 1, Wr, nil );
until a = 13;
Result := InpStr;
end;
В статье она была явно либо Char либо String, но тут это не важно, хотя я так тоже пробовал.
Проблема в следующем, при нажатии ENTER (#13), если нажития уже производились (InpStr <> ''), возвращается странное значение...
В общем что-то с ReadConsole, но что? Я не знаю...
Опять же, есть ли готовый пример НОРМАЛЬНОЙ работы с ReadConsole, т.к. использовать низкоуровневый ввод я не хочу... ):
Извиняюсь за настырность, заранее благодарен.. (:
DiamondShark (2004-10-05 12:19:00) [5]
> А чё там за трабла с выводим букв? Он, вероятно хочет в
> DOS'кодировке выводить?
Да.
> Можно ли настроить, чтобы он выводил в Win или изменить
> кодировку IDE-редактора?
Можно, конечно, набирать в OEM кодировке.
Можно перед выводом преобразовывать.
П7 (2004-10-05 11:27:00) [6]
> DiamondShark © (05.10.04 11:24) [4]
Спасибо. А чё там за трабла с выводим букв? Он, вероятно хочет в DOS'кодировке выводить? Можно ли настроить, чтобы он выводил в Win или изменить кодировку IDE-редактора?
DiamondShark (2004-10-05 11:24:00) [7]program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, Windows;
const
Text: PChar = 'Однажды в студёную зимнюю пору...'#13#10;
var
hOut: THandle;
Dummy: DWORD;
begin
hOut := GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsole(hOut, Text, StrLen(Text), Dummy, nil);
SetConsoleTextAttribute(hOut, BACKGROUND_BLUE or FOREGROUND_GREEN);
WriteConsole(hOut, Text, StrLen(Text), Dummy, nil);
readln;
end.
А вообще-то, справка, раздел Console Functions
Amoeba (2004-10-05 11:22:00) [8]Если поискать в сети, то можно даже найти библиотеки для написания консольных приложений эмулирующие ф-ии и процедуры модуля CRT из TurboPascal.
П7 (2004-10-05 11:12:00) [9]Прочитал статью, только у меня там что-то не всё получается. Кто разобрался - не могли бы привести простенький РАБОТАЮЩИЙ примерчик вывода разноцветных символов? А то что бы не делал, либо какая-то бодяга отображается, либо стандартные цвета... ):
GanibalLector (2004-10-05 02:02:00) [10]http://www.delphimaster.ru/articles/console.html
Там все есть.И еще,ТУДА надо почаще заходить!