Консольное приложение на Дельфи

Хоть и консольные приложения уже давно вышли из моды, с помощью них можно легко делать рутинные операции. Они занимают не так много места, не требовательны к ресурсам и быстро выполняются. В этой статье мы рассмотрим создание простейшего консольного приложения

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.


Консольное приложение на Дельфи