Ввод-вывод данных в Delphi

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

Ввод данных из окна ввода осуществляется вызовом функции InputBox, возвращаемым значением которой является строка, введенная пользователем. В общем виде инструкция для ввода данных с использованием функции InputBox выглядит так:

 

Переменная := InputBox (заголовок, подсказка, значение);

 

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

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

 

S := InputBox(‘Фунты-килограммы’, ‘Введите вес в фунтах’, ‘’);

 

Выполняется эта инструкция следующим образом. На экран выводится окно ввода (рис. 10).

 

Рис. 10. Пример окна ввода

 

После того как в поле ввода будет введено число и выполнен щелчок по кнопке OK, переменная S получит значение. Значение функции InputBox строкового типа. Если программе надо получить значение числового типа, то введенная строка должна быть преобразована в число при помощи соответствующей функции преобразования.

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

В Delphi имеются компоненты, обладающие фокусом ввода, например компонент Edit и компонент Memo. Компоненты, обладающие фокусом ввода, имеют специальное поле для ввода данных. Ввод данных из поля ввода компонента Edit (рис. 11) осуществляется обращением к свойству Text (текст) этого компонента. В этом случае ввод данных из этого компонента может быть такой:

 

a := StrToFloat(Edit1.Text);

 

К содержимому компонента TMemo обращаются посредством свойств этого компонента Text и Lines (строки). Компонент TMemo представляет собой многострочный редактор. Текстовая информация в многострочных редакторах располагается в нескольких строках. К строке текста обращаются, используя свойство Lines. Свойство Text содержит весь текст целиком.

Вывести результат программа может в окно сообщения, в поле вывода диалогового окна, файл или на принтер.

Вывод в окно сообщения может быть выполнен вызовом процедуры ShowMessage или функции MessageDlg.

Процедура ShowMessage позволяет вывести на экран простое диалоговое окно с текстом и одной командной кнопкой. В общем виде инструкция вызова процедуры ShowMessage выглядит так:

 

ShowMessage(сообщение);

 

где сообщение – выражение строкового типа.

Функция MessageDlg позволяет снабдить сообщение одним из стандартных значков Windows, например значком “Внимание”, задать количество и тип командных кнопок. На рис. 12 приведен пример окна сообщения, полученного в результате выполнения инструкции

 

r := MessageDlg(“Дискриминант равен нулю’ + #13

+ ‘Уравнение не имеет действительных корней.’, mtInformation, [mbOK], 0);

 

Рис. 12. Пример окна сообщения

 

Функция MessageDlg возвращает результат – число, проверив значение которого можно определить, выбором какой командной кнопки был завершен диалог. В общем виде обращение к функции MessageDlg выглядит так:

 

Выбор := MessageDlg (сообщение, тип, кнопки, контекстсправки);

 

Сообщение – это текст выводимого сообщения. Тип – это тип, вид сообщения. Сообщение может быть информационным, предупреждающим или сообщением об ошибке. Текст сообщения задается именованной константой. Име­нованные константы, определяющие тип сообщения, приводятся в таблице 2.

 

Таблица 2

 

Именованные константы функции MessageDlg

 

Число и вид кнопок задается списком “кнопки”, который может состоять из нескольких разделенных запятыми именованных констант, записанных в квадратных скобках. Параметр “контекстсправки” определяет номер экрана справочной системы, который появится при нажатии на клавишу <F1> в тот момент, когда окно сообщения находится на экране. Если использование справочной системы не предусмотрено, то при вызове функции MessageDlg в качестве параметра должен быть указан ноль.

Информацию можно вывести непосредственно на форму, в компонент Label, диалоговые окна других компонентов. Для вывода информации используются соответствующие свойства компонентов. Как было показано ранее (п 2.1), для вывода информации с помощью метки используется свойство Caption. В компоненте Edit для вывода информации используется свойство Text, в компоненте Memo – свойства Text и Lines.

Создадим приложение для перевода значений температуры из градусов Цельсия в градусы Фаренгейта.

Построение интерфейсной части начнем с изменения свойства Caption новой формы. Затем поместим компонент ТPanel на форму. Компонент TРanel представляет собой контейнер общего назначения. Контейнером называется компонент, предназначенный для размещения на нем других компонентов. Контейнеры предназначены для равномерного размещения компонентов в окне при изменении размеров окна. В инспекторе объектов на странице Properties свойству Align (выравнивание) зададим значение alBottom, а строку свойства Caption очистим. Свойство Align указывает способ выравнивания размещаемого компонента относительно того контейнера, в котором он размещается. Пустая форма представляет собой контейнер. Значение свойства alBottom означает, что панель прижимается к нижней границе формы и растягивается по всей ее длине. Высоту панели изменим таким образом, чтобы на ней поместились три компонента: метка ТLabel, однострочный редактор ТEdit, кнопка ТButton.

Компонент TLabel предназначен для вывода всевозможных сообщений. Свойству Caption придадим значение, комментирующее действия пользователя. Для компонента TButton этому свойству зададим значение “Ok”. В редакторе TEdit очистим свойство Text и изменим ширину этого компонента по своему усмотрению.

На форму поместим многострочный редактор – компонент TМemo. Его свойству Align зададим значение alClient, которое означает, что компонент заполняет всю свободную область контейнера (в данном случае всю свободную область формы). В многострочном редакторе TМemo имеется информация, состоящая из одного слова Memo1. Можно очистить окно редактора, если вызвать диалоговое окно изменения свойства, дважды щелкнув мышью в строке Lines инспектора объектов. Обратившись к свойству Font этого компонента, изменим размер и цвет шрифта текста.

На этом этап конструирования формы заканчивается. Для того чтобы придать форме функциональность, необходимо написать обработчик события. При нажатии на клавишу “Ok”, число из окна однострочного редактора TEdit должно быть пересчитано по формуле

F = 1.8C + 32,

а результат пересчета отражен в TМemo. Обработчик события OnClick (нажатие левой клавиши мыши) может иметь следующий вид:

 

procedure TForm1.Button1Click(Sender: TObject);

var x,y: real;

begin

x := StrToFloat(Edit1.Text);

y := 1.8 * x + 32;

Memo1.Lines.Add(Edit1.Text + ‘ C = ‘ + FormatFloat(‘#####.##’,y) + ‘ F’);

Edit1.Clear;

Edit1.SetFocus

end;

 

В первом операторе присваивания содержимое окна редактора преобразуется в вещественное число. Второй оператор присваивания – формула пересчета. Для отражения результата расчета в окне TМemo используется метод Add этого компонента. Метод Add класса TStringList добавляет новую строку к имеющемуся в Lines набору строк. Добавленная строка отображается на экране. Параметром метода является строковая переменная. Строковая переменная складывается из содержимого окна редактора Еdit1, строкового представления вещественной переменной y и констант ‘ C=’ и ‘ F’. Функция FormatFloat форматирует значение у с помощью описанного формата (см. приложение 1 файла материалов). Методы Clear и SetFocus позволяют очистить содержимое окна редактора Еdit1 и установить маркер в окно редактора.

Окно приложения для перевода значений температуры представлено на рис. 13.

Рис. 13. Окно приложения для перевода значений температуры