Консольное приложение на Дельфи
СОДЕРЖАНИЕ: Хоть и консольные приложения уже давно вышли из моды, с помощью них можно легко делать рутинные операции. Они занимают не так много места, не требовательны к ресурсам и быстро выполняются.Хоть и консольные приложения уже давно вышли из моды, с помощью них можно легко делать рутинные операции. Они занимают не так много места, не требовательны к ресурсам и быстро выполняются. В этой статье мы рассмотрим создание простейшего консольного приложения
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.