Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Цвет текста в консолном приложении [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

Там все есть.И еще,ТУДА надо почаще заходить!


Наверх

Титульная страница Поиск, карта сайта Написать письмо