Borland Delphi 4.0 для начинающих - Создание консольного приложения
А теперь забудьте обо
всех этих кнопочках, пиктограммах и пропахших мышами приложениях — настоящие
программисты и пользователи обожают текстовый режим! Если же говорить серьезно,
иногда программы в текстовом режиме могут быть полезными. Примерам таких
программ несть числа, и основная проблема всегда заключалась в том, что
они запускались в окне DOS и не имели доступа к Windows API или к таким
ресурсам, как принтеры и память (не говоря
уже о том, что это были 16-разрядные приложения с 640-килобайтовым ограничением
на используемую память). Теперь, когда Delphi поддерживает создание консольных
приложений, можно создавать 32-разрядные текстовые приложения с использованием
линейной модели памяти и с возможностью работать с Windows API и применять
ресурсы
Обычно консольные приложения
используются, когда не нужно вводить информацию большого объема и требования
к интерфейсу сведены к минимуму. Ну и заметим к тому же, что простенькое
"Hello, world!", созданное путем размещения
компонента TLabel в форме, будет иметь размер около 150 Кбайт, в то время
как консольное "Hello, world!" уложится в 10...
Пример консольного приложения
Лучший способ изучить консольные приложения— создать пресловутое "Hello, world!". Для создания его вручную сделайте следующее.
1. Выберите команду File/New Application.
2. Выберите команду File/Remove From Project, и появится диалоговое окно,
Remove From Project, показанное на рис. 1.15.
3. В проекте содержится один модуль формы. Выберете его и щелкните на кнопке
ОК. Появится диалоговое окно Save changes to Unit1.pas?
4. Щелкните на кнопке No, и форма будет удалена из проекта.
Сохраните
проект как EgConsoleHello.
Хотя мы создаем "бесформенное" приложение, оно все еще не является консольным и использует GUI, а значит, сравнимо по размеру с бронтозавром. Выберите команду View/Project Source, и в редакторе появится следующий текст.
program EgConsoleHello; uses Forms; {$R *.RES} begin Application.Initialize; Application.Run; end;
Этого слишком много, чтобы быть достаточным. Вы видите, что подключен модуль Forms, однако он не используется, поэтому данную строку можно удалить. Строки с Application используются для инициализации OLE-сервера и вывода главной формы. Поскольку мы не используем ни того, ни другого, удалите и эти строки. Последнее действие — объяснить компилятору, что мы хотим создать обычное, простое, незамысловатое консольное приложение. Этого можно достичь с помощью команды $APPTYPE. Код в результате будет выглядеть так.
program EgConsoleHello; {$APPTYPE CONSOLE} {$R *.RES} begin end;
Ax да! Мы же собирались вывести свое приветствие! Для этого добавьте между begin и end строку
WriteLn ('Hello, world!');
Сохраните, скомпилируйте и запустите проект из командной строки. Надеюсь, вам понравилось? И еще одно замечание — консольные приложения используют стандартные потоки ввода-вывода, а значит, вы можете использовать функции Read, ReadLn, Write и WriteLn.
Функции Windows API для консольного приложения
Вы можете делать гораздо больше в консольном приложении, чем просто считывать и выводить текст. Вам доступно около 40 функций Windows API для работы с дисплеем, например изменение атрибутов выводимых символов или изменение размеров консоли.
В листинге 1.1 изменяется текст, выводимый в заголовке консольного окна. Вы можете найти этот пример на дополнительно распространяемой дискете в папке EgConsoleTitle.
Листинг 1.1. Изменение заголовка консольного окна
program EgConsoleTitle; {$APPTYPE CONSOLE} uses Windows, SysUtils; {$R *.RES} var sNewTitle, sErrMsg: String; begin sNewTitle:= 'Welcome to Con5ole World'; if not SetConsoleTitle(PChar(sNewTitle)) then begin sErrMsg:= 'Unable to set caption - '+SysErrorMessage(GetLastError); MessageBox(0,PChar(sErrMsg),'Error',MB_ICONEXCLAMATION+MB_OK); end; ReadLn; end.
Здесь функция API SetConsoleTitle возвращает False, если назначить новый заголовок невозможно. GetLastError возвращает числовое значение последней ошибки API, которое SysErrorMessage конвертирует в строку для вывода на экран.
Совет: Поставляемая с Delphi система справки по Win32 содержит функции консольного API. Для доступа к ним выведите пункт Console Reference и щелкните на кнопке.