А теперь забудьте обо всех этих кнопочках,
пиктограммах и пропахших мышами приложениях - настоящие программисты и
пользователи обожают текстовый режим! Если же говорить серьезно, иногда
программы в текстовом режиме могут быть полезными. Примерам таких программ несть
числа, и основная проблема всегда заключалась в том, что они запускались в окне
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.
Рис. 1.15. Диалоговое окно
Remove From Project позволяет удалять модули и формы из проекта.
Хотя мы создаем "бесформенное" приложение, оно все еще не
является консольным и использует 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 и щелкните на кнопке.
|