Как вывести результат delphi

Ввод и вывод информации в Delphi.

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

Простейшими программами являются программы с линейной алгоритмической структурой, которая предполагает выполнение команд последовательно друг за другом. Программы линейной структуры с вычислениями обычно включают в себя следующие этапы:

1. ввод исходных данных;

2. вычисление требуемой величины;

3. вывод результата.

Соответствующая этим этапам блок-схема линейного алгоритма будет следующей:

Рис. 62 Блок-схема линейного алгоритма

Простейшим оператором ввода и вывода является рассмотренный нами оператор присваивания. В системе программирования Delphi ввести исходные данные и вывести результат позволяют различные компоненты.

Для ввода данных удобно использовать компонент TEdit. Для этого необходимо с помощью мыши установить в текстовом поле курсор и ввести с клавиатуры текст. Вводимая строка отображается в свойстве Text компонента TEdit и воспринимается программой как набор символов. Цифровые символы можно преобразовать в числа с помощью соответствующих типу числа функций преобразования.

Таблица 9. Функции преобразования

Функция Значение функции
IntToStr (x) Преобразует целое число в строку символов.
StrToInt (x) Преобразует строку символов в целое число.
FloatToStr (x) Преобразует вещественное число в строку символов.
StrToFloat (x) Преобразует строку символов в вещественное число.
FloatToStrF(x, f, k, m) Преобразует вещественное число в строку символов в соответствии с указанными параметрами: f – формат (способ изображения); k – точность (нужное количество цифр); m – количество цифр после десятичной точки
Chr (x) Возвращает символ, соответствующий ASCII коду числа х.

Для вывода информации можно использовать компонент TLabel. Чтобы увидеть результат работы программы, нужно присвоить свойству Caption компонента TLabel новое значение. Свойство Caption символьного типа. Поэтому выводимое число следует преобразовать в строку символов с помощью соответствующих типу числа функций преобразования.

Рассмотрим проект, в котором реализуется линейная алгоритмическая структура, и используются функции преобразования.

Пример.На рис. 62 приведен вид диалогового окна пересчета скорости из км/ч в м/с. Составить программу, которая по щелчку на кнопке выполняет этот перевод (исходная скорость выражается целым числом).

Создадим графический интерфейс окна по образцу, изображенному на рис. 63. Для этого поместим на форму текстовое поле TEdit, кнопку TButton и 2 надписи TLabel. Удалим содержимое свойства Text у компонента Edit1. У надписи Label1 запишем в свойстве Caption сообщение «Введите скорость в км/ч». Для кнопки Button1 введем заголовок «Пересчет».

Рис. 63 Графический интерфейс окна

Исходные данные – скорость в км/ч – будем вводить в текстовое поле Edit1. Результат перевода выведем в надпись Label2.

В данном проекте можно выделить следующие этапы линейного алгоритма:

1. Ввести в поле Edit1 скорость в км/ч.

2. Перевести скорость из км/ч в м/с.

3. Вывести в надпись Label2 скорость в м/с.

Рассмотрим каждый этап линейного алгоритма.

1. Для обозначения исходной скорости в км/ч введем дополнительную переменную целого типа V1. Присвоим переменной V1 значение свойства Text компонента Edit1.

Однако такая запись является неверной, так как типы данных до и после знака присваивания не совпадают: переменная V1 целого типа, а свойство Text компонента Edit1 имеет строковый тип данных. Чтобы далее производить вычисления с вводимыми в поле Edit1 цифрами, которые пока воспринимаются программой как текст, необходимо преобразовать их в числовой формат. В данном случае необходимо использовать функцию StrToInt (преобразует строку в целое число). Таким образом, текст команды ввода будет иметь следующий вид:

V1:= StrToInt (Edit1.Text);

2. Чтобы перевести скорость из км/ч в м/с нужно умножить значение скорости на 1000 и разделить 3600 (в 1 километре – 1000 метров, в 1 часе – 3600 секунд). Введем еще одну переменную V2 для обозначения скорости в м/с. Таким образом, для расчета скорости в м/с используется следующий оператор:

Переменная V2 будет вещественного типа, так как в выражении для ее вычисления имеется операция деления.

3. Для вывода полученной скорости предназначен компонент Label2. Поэтому необходимо свойству Caption компонента Label2 присвоить значение переменной V2:

Данная запись опять нарушает соответствие типов данных, так как в свойстве Caption у надписи могут отображаться только данные символьного типа, а переменная V2 – это вещественное число. Поэтому необходимо преобразовать переменную V2 вещественного типа в строку функцией FloatToStr (преобразовать вещественное число в строку). Текст команды вывода будет выглядеть следующим образом:

При выводе результата часто к полученным значениям добавляют комментарии. Например, в данном проекте можно к значению скорости добавить запись её единиц измерения ‘м/с’. В программе эта запись указывается в одиночных кавычках (апострофах), т.к. является символьной константой. Таким образом, вывод результата может иметь следующий вид: Label2.Caption:= FloatToStr(V2)+ ‘м/с’;

Так как мы ввели дополнительные переменные V1 и V2, то нужно указать их тип в разделе описаний переменных. Все переменные, используемые в Delphi, подразделяются на два основных вида. Это глобальныепеременные, которые могут использоваться во всей программе, и локальныепеременные, которые можно использовать только внутри определенной процедуры.

В данном случае опишем переменные как локальные внутри процедуры TForm1.Button1Click. Для этого после заголовка процедуры введем раздел описания переменных, который открывается зарезервированным словом var. Описание переменных будет выглядеть так:

var V1: integer; V2: real;

Таким образом, текст обработчика события для кнопки Пересчет будет выглядеть следующим образом:

procedure TForm1.Button1Click(Sender: TObject);
var V1: integer; V2: real;
begin
V1:= StrToInt (Edit1.Text);
V2:= V1*1000/3600;
Label2.Caption:= FloatToStr(V2) + ‘м/с’;
end;

Рис. 64 Работающее приложение

Можно было написать программу и без ввода дополнительных переменных:

procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Caption:= FloatToStr((StrToInt (Edit1.Text))*1000/3600) + ‘м/с’;
end

Чтобы программа была готова к вводу новых данных, нужно очистить текстовое поле и поместить в него курсор. В Delphi для этого применяются методы:

Clear (Очистить)

SetFocus (Передать фокус ввода)

Учитывая эти методы, текст программы изменится на следующий:

Источник

Сегодня:
000

Последние:
— 24.08, 10:44 / #6695
— 29.03, 23:32 / #6682
— 30 апреля 2012

Сейчас онлайн:
На сайте — 4
На IRC-канале — 2

Знаний, полученных в предыдущих уроках, достаточно, чтобы приступить к изучению механизмов ввода и вывода данных. Общая схема работы программы примерно такова: пользователь вводит данные, программа их считывает, производит с ними какие-то операции и выдаёт результат. Упрощённо: ввод, обработка, вывод. Что мы уже умеем? Для ввода данных нам понадобятся такие элементы как текстовое поле ввода (TEdit) или многострочное поле — TMemo, CheckBox или RadioButton для выбора параметров и др. Для вывода можно использовать текстовую метку (TLabel). Теперь разберём программную часть. Мы уже умеем описывать переменные, знаем, что такое тип данных и какие бывают типы (числа, строки и т.п.) Осталось лишь выяснить как связать визуальные элементы с программным кодом. В примерах, рассмотренных в предыдущих уроках, мы задавали значения переменным вручную (в коде), но это конечно же неприемлемо ни для одной программы. Программа должна быть универсальной и обрабатывать те данные, которые передал пользователь. Для ввода и вывода будут использоваться некоторые функции. Что такое функции, зачем они нужны, и как с ними работать, мы рассмотрели на прошлом уроке. Ну что, ближе к делу?

Ввод на примере TEdit

Текстовое поле ввода (TEdit) — простой и в то же время удобный элемент для ввода данных. В поле мы можем ввести и число и текст — никаких ограничений нет. Итак, наша первая задача — узнать, что введено в поле. Для этого мы должны обратиться к свойствам этого объекта. За текст, находящийся в поле, отвечает свойство Text. Именно им мы и воспользуемся. Попробуем считать число, которое будет введено. Расположим на форме само поле (TEdit) и кнопку (TButton). Создадим обработчик нажатия кнопки и сделаем следующее: объявим переменную целочисленного типа, а затем попробуем поместить в неё значение, которое введено в поле.

procedure TForm1.Button1Click(Sender: TObject);
var A: Integer;
begin
A := Edit1.Text;
end ;

Казалоось бы, всё верно — переменную мы объявили, и просто хотим узнать, что введено в поле. Попробуем запустить (F9) — всё не так просто! Компилятор сообщает об ошибке:

[Error] Unit1.pas: Incompatible types: ‘Integer’ and ‘TCaption’

Здесь сказано, что типы данных Integer и TCaption не соответствуют друг другу. TCaption — это тип данных свойства Text у TEdit. Этот тип «обозначает» текстовую строку, т.е. любые символы. Становится понятнее? В поле ввода мы можем ввести не только цифры, но и буквы и даже любые знаки, какие есть на клавиатуре (а на самом деле — вообще любые символы из кодовой таблицы). Однако наша переменная — число! Получается, что мы хотим в качестве числа записать символы. Непорядок! Да, вы скажете: но мы ведь будем вводить в поле цифры, а не буквы. Верно, но знает ли об этом компилятор? Конечно нет. А уговорить его не удастся 🙂

Несоответствие типов данных — частая ошибка. Преобразовывать одни типы данных в другие требуется очень часто. Наш пример — яркое тому подтверждение. Чтобы работать с числом, мы должны введённый текст (именно текст) преобразовать в число.

Преобразования могут выполняться разными способами. Основной из них — применение специальных функций. Функции принимают один из несколько параметров (аргументов), одним из которых является переменная или значение, подлежащее преобразованию. Функция выполняет какие-то операции и возвращает значение нужного нам типа.

Для преобразования текста (строки) в целое число служит функция StrToInt(). Название абсолютно точно отражает назначение функции. У функции единственный параметр — строка, а на выходе получается число. Поэтому, чтобы наш пример работал, мы должны написать так:

procedure TForm1.Button1Click(Sender: TObject);
var A: Integer;
begin
A := StrToInt(Edit1.Text);
end ;

Теперь программа запустится. Попробуем ввести число и нажать кнопку — никакой ответной реакции не наблюдается. Это верно, ведь мы кроме считывания введённого числа ничего не запрограммировали. А теперь попробуем ввести посторонние символы (т.е. не цифры) — программа «вылетит» с сообщением об ошибке:

В сообщении указана и причина возникновения ошибки: «‘abc’ — неверное целое число«. Как избегать подобных сообщений, а вместо этого выполнять свои действия, мы разберёмся позже.

Вывод данных на примере TLabel

Прежде чем делать вывод, давайте произведём с введённым числом какие-нибудь операции. К примеру, давайте возведём число в квадрат. Как это делается, вы уже знаете. Вывод осуществим в текстовую метку (TLabel). За текст метки отвечает свойство Caption. В данном случае наши действия должны быть обратными: при вводе мы заносили в переменную введённое в поле значение, а при выводе мы должны значение из переменной перенести в элемент. Caption у TLabel описывается тоже типом данных TCaption, т.е. это текст. А значит мы должны сделать обратное преобразование, т.е. преобразовать число в текстовую строку. Как называется функция для такого перевода, легко догадаться — IntToStr(). Финальный вариант обработчика кнопки:

procedure TForm1.Button1Click(Sender: TObject);
var A: Integer;
begin
A := StrToInt(Edit1.Text);
A := Sqr(A);
Label1.Caption := IntToStr(A)
end ;

Запускаем программу и пробуем:

Простейшая программа ввода-вывода готова.

Где узнать о типах данных свойств?

Очень логичный вопрос — где узнать, какой тип данных имеет свойство элемента, кроме как смотреть сообщения об ошибках? Ответ прост — нам снова поможет редактор кода. После того, как мы ввели имя объекта и поставили точку, появляется список всех доступных команд. Напротив свойств через двоеточие указывается и тип данных:

Обратите внимание, что редактор автоматически отслеживает, какие команды содержатся в коде и в этом списке всегда находятся только те пункты, которые применимы в данной ситуации. Так, если написать «A:=Edit1.«, то в списке будет отсутствовать свойство Text, ведь тип переменной A и тип этого свойства не совпадают:

При написании функции StrToInt() строка свойства Text конечно же появится.

Мы рассмотрели механизм ввода-вывода на примере обработки числа. Если обработке подлежит текст, то преобразовывать типы данных не придётся. Подобным образом осуществляется ввод и вывод практически любых данных, главное — выполнять преобразование одних типов в другие.

Для ввода целых чисел также есть удобный элемент — TSpinEdit. Расположен он на вкладке Samples. По внешнему виду похож на TEdit, только в поле ещё находятся две кнопки со стрелками — для изменения значения. Допустимые границы числа задаются свойствами MinValue и MaxValue, а само значение хранится в свойстве Value.

Работа с вещественными числами

Следует упомянуть и о дробных числах, ведь иногда без них не обойтись. В целом, их ввод и вывод практически такой же, как и целых чисел, только используются функции StrToFloat() и FloatToStr(). Всё просто. Однако с вещественными числами есть одна проблема — разделитель целой и дробной части. Дело в том, что нет определённости, какой символ считать разделителем — точку или запятую. Какой символ выбирается — зависит от настроек операционной системы (в Windows этот знак определяется в Панели управления в разделе Язык и региональные стандарты). Таким образом, если заточить программу под запятую, то на системах, где установлена точка, работать ничего не будет и будут возникать ошибки во время работы. В то же время, под точку тоже нельзя затачивать программу, ведь может стоять и запятая. К счастью, решение есть. Есть переменная, которую нигде не нужно объявлять, но значение которой можно менять — это переменная DecimalSeparator. Она объявлена в модуле SysUtils и хранит тот символ, который будет считаться разделителем. Установить нужное значение достаточно один раз — например при запуске программы. Вот так можно установить разделителем точку:

procedure TForm1.FormCreate(Sender: TObject);
begin
DecimalSeparator := ‘.’ ;
end ;

Другие способы вывода

Помимо вывода в объекты (например, в TLabel) иногда удобно выводить данные в виде маленьких отдельных окон. Для этой цели существуют стандартные команды. В предыдущих уроках мы с ними уже встречались, но не разбирали их подробно.

1. Простое окно с сообщением — ShowMessage()

Самое примитивное окно содержит указанный текст и кнопку OK для закрытия окна. Вызвать такое окно можно процедурой ShowMessage(), параметром которой является текст — он и будет отображён в окне. Модифицируем нашу мини-программу, убрав TLabel и заменив строку вывода:

procedure TForm1.Button1Click(Sender: TObject);
var A: Integer;
begin
A := StrToInt(Edit1.Text);
A := Sqr(A);
ShowMessage(IntToStr(A));
end ;

В этом случае мы увидим следующее:

Следует обратить внимание на то, что пока окно сообщения находится на экране, интерфейс программы блокируется, а также прекращается выполнение дальнейших команд. Только после нажатия на кнопку программа продолжит свою работу.

2. Диалоговое окно — MessageDlg()

Диалоговые окна — более сложный тип окон. Диалоговые окна часто используются для «общения» с пользователем. Однажды такое окно нами уже использовалось — при закрытии окна программы мы спрашивали у пользователя, действительно ли окно нужно закрыть. Теперь разберём работу с такими окнами подробно.

Создаются диалоговые окна функцией MessageDlg(). Это именно функция, а не процедура. Возвращаемым значением является кнопка, которую нажал пользователь. У функции 4 входных параметра:

  • Текст сообщения (тип данных — String);
  • Тип диалогового окна (специальный тип данных — TMsgDlgType) — указывает на значок, расположенный в окне и на заголовок окна. Этот параметр задаётся одной из следующих констант:
    • mtInformation — информационное окно (значок в окне — буква «i»);
    • mtConfirmation — окно с вопросом (значок — воспросительный знак);
    • mtWarning — предупреждающее окно (значок — восклицательный знак);
    • mtError — окно с сообщением об ошибке (значок — крест на красном фоне);
    • mtCustom — окно без значка, а в заголовке — название исполняемого файла программы (все остальные типы в заголовок помещают соответствующее типу диалога название — Information, Warning и т.д.)
  • Кнопки, которые будут показаны в окне. Каждой кнопке также соответствует определённая константа. Кнопки перечисляются через запятую, а весь этот «комплект» обрамляется квадратными скобками (что означают квадратные скобки — узнаем позже). Вот константы всех доступных кнопок: mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp. Название константы говорит о названии самой кнопки.
  • Четвёртый параметр указывает на индекс раздела в справочной системе, соответствующий данному диалогу. Как правило, не используется и задаётся просто 0.

В качестве возвращаемых функцией значений служат все те же константы кнопок, только с тем отличием, что вместо «mb» они начинаются на «mr» (сокращения от «modal button» и «modal result» соответственно).

Изменим нашу программу — пусть результат выдаётся в информационном окошке. Обратите внимание, насколько красивее выглядит такое окно:

procedure TForm1.Button1Click(Sender: TObject);
var A: Integer;
begin
A := StrToInt(Edit1.Text);
MessageDlg( ‘Квадрат числа ‘ +IntToStr(A)+ ‘ равен ‘ +IntToStr(Sqr(A)),mtInformation,[mbOK],0);
end ;

Примечание: Текстовые строки можно объединять, просто складывая их — знак «+» (см. фрагмент кода выше). Сами строки записываются в одиночных кавычках.

Ну и напоследок попробуем использовать диалог для уточнения у пользователя дополнительной информации. К примеру, если введено отрицательное число, будем спрашивать, нужно ли его возвести в квадрат. Код получится приблизительно таким:

procedure TForm1.Button1Click(Sender: TObject);
var A: Integer;
begin
A := StrToInt(Edit1.Text);
if A then
if MessageDlg( ‘Число отрицательное. Возвести его в квадрат?’ ,mtConfirmation,[mbYes,mbNo],0) = mrYes then
MessageDlg( ‘Квадрат числа ‘ +IntToStr(A)+ ‘ равен ‘ +IntToStr(Sqr(A)),mtInformation,[mbOK],0);
end ;

А результат будем таким:

Внешний вид окон всех типов:

3. Диалоговые окна MessageBox()

C помощью фунции MessageBox() можно также выводить диалоговые окна. По внешнему виду они практически ничем не отличаются от окон MessageDlg(), однако есть возможность указать и заголовок окна. Для формирования строки кода с использованием MessageBox() есть программа Master MessageBox. C помощью неё можно быстро создать нужное диалоговое окно. Проблема MessageBox() в том, что тип диалога и кнопки задаются немного необычным образом.

Ввод с помощью диалогового окна

Специальные окошки существуют не только для вывода на экран, но и для ввода. Примером такого окна является InputBox() . Функции передаётся 3 параметра: текст заголовка окна, текст пояснения и значение, находящееся в поле при показе окна на экран. Введённую в поле строку функция возвращает как значение-результат. Пример:

procedure TForm1.Button2Click(Sender: TObject);
begin
if InputBox( ‘Загадка’ , ‘Сидит дед, в сто шуб одет. Кто его раздевает — тот слёзы проливает. Кто это?’ , » ) = ‘лук’ then
MessageDlg( ‘Правильно!’ ,mtInformation,[mbOk],0)
else
MessageDlg( ‘Вы не угадали.’ ,mtWarning,[mbOk],0)
end ;

Мы рассмотрели способы ввода и вывода данных, а также познакомились с диалоговыми окнами. Приёмы ввода-вывода используются практически в любом приложении: в тех, которые имеют оконный интерфейс, это делается с использованием визуальных объектов, а для консольных приложений — в режиме командной строки.

Составить программу, запрашивающую у пользователя три числа — длины сторон треугольника. При нажатии кнопки программа должна вычислить площадь треугольника с указанными сторонами, а если такой треугольник не существует, то выдать соответствующее сообщение.

Автор: Ерёмин А.А.

Статья добавлена: 7 августа 2007

Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.

Статьи, похожие по тематике

Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:

Ссылка для форумов (BBCode):

Быстрая вставка ссылки на статью в сообщениях на сайте:
<> (буква a — латинская) — только адрес статьи (URL);
<<статья:113>> — полноценная HTML-ссылка на статью (текст ссылки — название статьи).

Поделитесь ссылкой в социальных сетях:

Комментарии читателей к данной статье


Репутация: нет

Репутация: +1

Репутация: нет

Оставлять комментарии к статьям могут только зарегистрированные пользователи.

Источник

Читайте также:  Как отстирать облепиху с одежды ягоды
Оцените статью