Консольное приложение на Дельфи
Консольное приложение на Дельфи
Хоть
и консольные приложения уже давно вышли из моды, с помощью них можно легко
делать рутинные операции. Они занимают не так много места, не требовательны к
ресурсам и быстро выполняются. В этой статье мы рассмотрим создание простейшего
консольного приложения
Intro
Надеюсь,
я вас убедил, что консольные программы в "домашнем хозяйстве" это
есть гуд. Можно наделать кучу программок, со смешным размером, помогающих практически
во всем. Но как же написать такое приложение? Сейчас расскажу.
Что
бы написать консольное приложение нужно в меню Project выбрать команду View
Source. Затем закрыть Все юниты, которые были в проекте и оставить
"голый" dpr файл проекта. Его нужно привести к такому виду:
program
Project1;
{$APPTYPE
CONSOLE}
begin
end.
Директива
{$APPTYPE CONSOLE} предназначена для компилятора и сообщает ему, что программу
нужно генерировать как консольное приложение.
Следует
обратить внимение на то, что в Windows спользуется кодировка символов ANSI, а в
досе ASCII. Из-за этого вместо русских символов мы рискуем увидеть абракадабру.
Для преобразования русских символов в ASCII в каждом вашем проекте будет нужна
функция
function AnsiToAscii(s :
string):string;
var i : Integer;
begin
for i:=1 to length(s) do
begin
case s[i] of
'А'..'п' : s[i]:=Chr(ord(s[i])-64);
'р'..'я' : s[i]:=Chr(ord(s[i])-16);
end;
end;
AnsiToAscii:=s
end;
Write
и WriteLn
Для
вывода сообщений в окно применяются процедуры Write и WriteLn. Их основное отличие
друг от друга состоит в том, что после выполнения процедура Write каретка
остается после слова, а после WriteLn перемещается на новую строку. Пример:
Write('Some text');
write('else some text');
Мы увидим:
Some textelse some text.
WriteLn('Some text');
Write('else some text');
Мы увидим:
Some text
else some text
Read и ReadLn
Процедуры
Read и ReadLn предназначены для ввода в программу значений переменных, т.е.
считывания введенных пользователем значений. Они отличаются друг от друга тем,
что после выполнения процедуры Read можно прочитать той же функцией число,
стоящее после другого числа. А если мы применим ReadLn, то все значения, после
первого, игнорируются и каретка перемещается на следующюю строку.
Outro
Ну
и на последок небольшой пример:
program
kilometerstometters;
{$APPTYPE CONSOLE}
uses
SysUtils;
function AnsiToAscii(s :
string):string; //эта функция позволяет отображать
var i : Integer; //русские символы
begin
for i:=1 to length(s) do
begin
case s[i] of
'A'..'ï' :
s[i]:=Chr(ord(s[i])-64);
'ð'..'ÿ' :
s[i]:=Chr(ord(s[i])-16);
end;
end;
AnsiToAscii:=s
end;
var
metters, kilometers : Integer;
comm : String;
t : Boolean=false;
label
b;
begin
metters
:= 0; //инициализация переменных
kilometers
:= 0;
comm := '';
t := false;
writeln('(C)Brutus, 2003,
http://pz1.traffichouse.de');
b:
t
:= false;
writeln(AnsiToAscii('Введите
величину в километрах и нажмите ')+'[Enter]');
write('->');
try
readln(kilometers);
metters := kilometers*1000;
except
writeln(AnsiToAscii('Ошибка! Введите правильное
число.'));
t
:= true;
end;
if t=true then goto b;
writeln(AnsiToAscii('Результаты:'));
writeln(AnsiToAscii(IntToStr(kilometers)+'
километров это '+IntToStr(metters)+' метров'));
writeln(AnsiToAscii('Введите
слово ')+'''again'''+AnsiToAscii(', что бы перевести еще что нибудть. Что бы
выйти нажмите просто ')+'[Enter]');
try
readln(comm);
if (comm='again') or
(comm='''again''') then t := true;
except
end;
if t=true then goto b;
end.
Список литературы
Для
подготовки данной работы были использованы материалы с сайта http://www.soch.imperium.by