Консольные приложения в дельфи с использованием Windows API функций.
Дарова! В этой статье я расскажу как работать с консольными приложениями в delphi.
Я покажу нетолько как просто вывести надпись, а так же как изменять аттрибуты
текста и окна вывода.
Итак, первым делом надо получить дескриптор нашей консоли - с помощью
функции GetStdHandle(), которой мы передаём в виде единственного параметра,
строку - STD_OUTPUT_HANDLE, и возвращаемый дескриптор присваиваем переменной,
типа integer. Всё! Теперь мы можем изменять любые параметры консоли, размер,
цвет, заголовок, позицию.... Вообщем рассмотрим на примере:
program Cons;
{$APPTYPE CONSOLE}
uses
windows,
messages, // ЗДЕСЬ НУЖНА ТОЛЬКО ДЛЯ ЗАМЕНЫ ИКОНКИ
shellapi; // ЗДЕСЬ НУЖНА ТОЛЬКО ДЛЯ ЗАМЕНЫ ИКОНКИ
procedure WrtToConsole;
var
hCon: integer;
cr : COORD;
handl : HWND;
ico : HICON;
begin
hCon := GetStdHandle(STD_OUTPUT_HANDLE);
cr.X := 0;
cr.Y := random(40);
windows.SetConsoleTitle('RULEZZ!');
handl := FindWindow(nil, 'RULEZZ!');
ico := ExtractIcon(0, 'icon.ico', 0);
SendMessage(handl, WM_SETICON, 0, ico);
windows.SetConsoleCursorPosition(hCon,cr);
SetConsoleTextAttribute(hCon,11);
WriteLn('comp-info.ru <--> CODING');
SetConsoleTextAttribute(hCon,35);
WriteLn('comp-info.ru <--> CODING');
end;
begin
randomize;
WrtToConsole;
readln;
end.
Итак, что здесь к чему. Рассматривать будем процедуру WrtToConsole(). В
ней сначала обьявляем переменные - hCon типа integer для хранения стандартного
дескриптора вывода нашей консоли, cr типа COORD - в ней будут храниться координаты,
в которые мы переместим каретку в консоли, handl - хэндл окна консоли, и ico -
в ней будем хранить дескриптор иконки, установленной в нашей консоли.
Теперь, собственно к самому кодингу - сначала получаем дескриптор
окна вывода функцией GetStdHandle, потом устанавливаем случайное значение для переменной
с координатой, и устанавливаем текст заголовка окна - RULEZZ!, потом ищем окно с этим же заголовком
и присваиваем возвращённое функцией значение переменной handl. Далее извлекаем иконку из файла функцией
ExtractIcon - она содержится в модуле ShellApi, а не в Windows, поэтому подключаем его.
Далее посылаем окну сообщение WM_SETICON (WM_SETICON как и другие сообщения хранятся в модуле MESSAGES),
и устанавливаем иконку окна. Далее функцией SetConsoleCursorPosition() устанавливаем
позицию каретки. А вот далее начинается самое интересное - SetConsoleTextAttribute.
Для людей тёмных в английском языке перевожу - установка консольных атрибутов текста.
Первым параметром мы всегда передаём дескриптор вывода, а вот второй параметр самый интересный -
он задаёт аттрибуты текста - тоесть цвет текста и фон текста. В примере я указал 11 и 35 - в итоге,
после вывода текста в консоль с помощью процедуры WriteLn, получилось нечто "зеркальное".
Ну вот собственно и всё! Я показал лишь несколько основ, что может пригодиться при работе с консольными приложениями.
И напоследок как всегда -
Исходник
SLAyer
Другие статьи
По всем вопросам и предложениям по сайту пишите на info@comp-info.ru  
|