Основы алгоритмизации и программирования - Учебное пособие (Струков В.М.)

3. простейший ввод/вывод данных

Надо сказать, что ввод данных с клавиатуры и вывод данных на экран дисплея в Delphi существенно отличается от того, как это делалось в Turbo Pascal. Это связано с тем, что стандартные встроенные средства Turbo Pascal (операторы Read, Write) предназначены для работы в интерфейсе командной строки. Приложения же, разрабатываемые в среде Delphi, предназначены для работы в среде Windows, т. е. в диалоговом оконном пользовательском интерфейсе. А в этом случае операторы Read и Write уже не используются. Здесь используются именно диалоговые средства оконного типа, на описании которых мы и остановимся ниже.

3.1.Простейший ввод данных

Простейший ввод данных в Delphi (ввод скалярных значений) можно осуществлять, по меньшей мере, четырьмя способами:

С помощью функции InputBox (невизуальным способом);

С помощью визуального компонента Edit;

С помощью визуального компонента SpinEdit;

Из файла.

Простейший ввод данных с помощью функции InputBox

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

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

где: <имя_пер.> - имя переменной типа string, в которую будет занесено введенное значение;

<заголовок> - заголовок окна, расположенный в верхней его строке;

<подсказка> - текст, который выводится над строкой ввода данных;

<значение> - это текст, который появляется в строке ввода в момент его появления на экране.

Функция InputBox возвращает значение типа string.

Пример.

         Var s:string;

         . . . . . . .

         Begin

         s:=InputBox(‘Ввод данных’,’Введите число’,’’);

Сразу после обращения к функции InputBox на экране появляется окно следующего вида:

После того как в поле ввода будет введено число, нужно щелкнуть одну из кнопок – Ok или Cancel. При нажатии кнопки Ok в переменную s будет занесено введенное в поле ввода значение. Если же будет нажата кнопка Cancel, то ей будет присвоено значение параметра <значение>.

ЗАМЕЧАНИЕ 1. Функция InputBox возвращает строковое значение, поэтому в том случае, когда вводится число, непосредственно использовать ее в арифметических выражениях нельзя. Предварительно нужно преобразовать введенное число из строкового представления в числовое .С этой целью можно воспользоваться одной из функций преобразования - StrToInt или StrToFloat, например:

k:= StrToInt(s);

или:

k:= StrToInt(InputBox(‘Ввод данных’,’Введите число’,’’));

ЗАМЕЧАНИЕ 2. Функция InputBox не является компонентом и ее окно нельзя разместить на форме так, как это делается с визуальными компонентами. Ее активизация осуществляется только путем вызова как это сделано в предыдущем примере.

Простейший ввод данных с помощью компонента Edit

Для реализации этого способа используется визуальный компонент Edit  - из палитры Standard.

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

Основными свойствами этого компонента являются:

AutoSize:Boolean - предназначается для автоматического формиро-вания размеров компонента по его содержимому;

ParentFont, ParentColor:Boolean - для включения механизма наследования соответствующего признака от родительских объектов;

MaxLength:integer - определяет максимальную длину текстовой строки. Если равно 0, то длина строки не ограничена;

Text:string – в этом свойстве в виде текста содержится отображаемое в поле ввода значение.

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

Var s:string;

 . . . . . . .

Begin

s:=Edit1.Text;

  . . . . . . .

End.

ЗАМЕЧАНИЕ. Свойство Text возвращает значение типа string. Поэтому, если мы хотим воспользоваться этим компонентом для ввода числовых значений, необходимо воспользоваться функциями преобразования типа: Val, StrToFloat или StrToInt. StrToInt преобразуют текст в целочисленное значение, а StrToFloat преобразует текст в вещественное значение;

Пример.

Var k:integer;

  . . . . . . .

k:=StrToInt(Edit1.Text);

ЗАМЕЧАНИЕ 1. Для ввода паролей используется свойство PasswordChar типа Char, которое задает символ, отображаемый в поле ввода при нажатии любой клавиши, например:

Edit1.PasswordChar:=’*’;

Edit1.Text:=’Вулкан’;

При этом на экране в окне ввода будет отображено не слово Вулкан, а соответствующее количество звездочек - ******.

ЗАМЕЧАНИЕ 2. Для ввода информации по задаваемому шаблону можно использовать компонент MaskEdit, который позволяет ограничить количество и тип вводимых символов. Этим компонентом удобно пользоваться для ввода даты, времени, телефонного номера и т.п.

ЗАМЕЧАНИЕ 3. Для проверки вводимой информации можно исполь-зовать обработчики событий, например, обработчик события OnKeyPress.

Пример.

Procedure Tform1.Edit1KeyPress(Sender:Tobject; var Key:char);

Begin

If (Key<’0’) or (Key>’9’) Then Key:=#0;

End;

В этом случае для редактора Edit1 установлено разрешение ввода только цифр.

Ввод целых чисел с помощью компонента SpinEdit

Компонент SpinEdit находится в палитре Samples

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

путем ввода с клавиатуры;

с помощью стрелок.

Введенное значение автоматически преобразуется к целому типу.

Основными свойствами этого компонента являются:

Increment:integer – задает шаг, на величину которого изменяется (увеличивается или уменьшается) щелчком левой кнопкой мыши по одной из стрелок («вверх» или «вниз») вводимое значение; по умолчанию шаг приращения равен 1;

MaxLength:integer – задает максимальное количество символов, которое может быть введено в окно ввода; если введенное количество символов будет больше, чем MaxLength, то оно автоматически будет уменьшено до MaxLength; если MaxLength установить меньшим или равным 0 (например, -1 или -25), то контроль количества введенных символов будет отключен;

MaxValue:integer – задает максимальное значение числа, которое может быть введено в поле ввода;

MinValue:integer – задает минимальное значение числа, которое может быть введено в поле ввода;

Value:integer – задает минимальное значение числа, которое может быть введено в поле ввода;

ReadOnly:boolean – разрешает (false) или запрещает (true) ввод данных в поле ввода SpinEdit.

ЗАМЕЧАНИЕ 1. Если MaxValue= MinValue, то диапазон вводимого значения ограничивается только диапазоном представления значений типа integer.

ЗАМЕЧАНИЕ 2. Если введенное значение больше, чем MaxValue, то оно автоматически уменьшается до значения MaxValue.

ЗАМЕЧАНИЕ 3. Если введенное значение меньше, чем MinValue, то оно автоматически увеличивается до значения MinValue.

Достоинством использования компонента SpinEdit по сравнению с компонентом Edit при вводе целых чисел является отсутствие необходимости преобразования введенного значения к целому типу.

Пример возможного использования компонента SpinEdit:

Var k:integer;

 . . . . . . .

k:= SpinEdit1.Value+5;

3.2. Простейший вывод данных на экран

Рассмотрим следующие способы вывода данных в Delphi:

С использованием стандартных процедур ShowMessage и MesssageDlg.

С использованием окна вывода компонента Label.

Вывод сообщений с использованием стандартных процедур

Самым простым способом вывода текстових сообщений пользователю в Delphi является использование процедуры ShowMessage.

Формат обращения к процедуре ShowMessage имеет следующий вид:

ShowMessage(<строковое выражение>);

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

 Showmessage(‘Программа’);

После выполнения этого оператора на экране появится следующее окно:

Целесообразно использовать эту процедуру для вывода информационных или предупреждающих сообщений.

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

Формат обращения к функции MessageDlg:

R:=Messagedlg(<Сообщение>,<Тип>,<Кнопки>,<Контекст>);

Здесь R – переменная типа Word,

<Тип> - тип сообщения (информационный, предупредительный или др.): MtError, MtInformation, MtConfirmation, MtWarning;

<Кнопки> - число и вид кнопок. На этом месте записываются заключённые в квадратные скобки именованные константы, задающие вид и количество кнопок, например:  MbOk, MbCancel].

Возможно использование следующих именованных констант: MbYes, MbNo, MbHelp, MbRetry.

<Контекст> - определяет номер экрана справочной системы, который появляется при нажатии клавиши F1 (если справка не нужна, то в этом месте ставится 0).

Возвращаемые значения: Mb меняется на Mr. Для определения, какая именно кнопка была нажата, можно использовать следующий оператор:

 if R=MrOk then . . . ;

Пример.

R:=MessageDlg(‘Возможна ошибка!’,MtWarning,[MbOk, MbCancel],0);

При выполнении этого оператора на экране появится окно следующего вида:

ЗАМЕЧАНИЕ. Если с помощью описанных процедур требуется вывести числовое значение, то его предварительно необходимо преобразовать в текстовое представление с помощью процедур Str, IntToStr, FloatToStr, например:

Var k:integer;

. . .

k:=2;

ShowMessage(‘k=’+IntToStr(K));

Вывод сообщений с помощью компонента Label

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

Label1.Caption:=<Строковое выражение>;

ЗАМЕЧАНИЕ 1. Для вывода числовых значений они должны быть предварительно преобразованы в текстовое представление с помощью процедур Str, IntToStr, FloatToStr, например:

Var k:integer;

          . .

k:=2;

Label1.Caption:=‘k=’+IntToStr(K);

ЗАМЕЧАНИЕ 2. Компонент Label можно использовать для вывода многострочных сообщений. Для этого используют управляющий символ ‘переход в начало следующей строки’ - #13.

Пример.

Label1.Caption:=’Строка1’+#13+’ Строка2’;

После выполнения этого оператора в поле компонента Label будут выведены две строчки:

Строка1

Строка2 

Ввод значений с помощью компонента LabeledEdit

Ввод значений с помощью компонента Edit неудобен тем, что для обозначения его назначения необходимо использовать еще одну компоненту – Label. Для устранения этого маленького неудобства в поздних версиях Delphi в палитру Additional введен комбинированный компонент – помеченное поле ввода – LabeledEdit .

Кроме характерных для компонентов Edit и Label свойств, таких как Caption и Text, этот компонент обладает таким свойством как LabelPosition, которое определяет положение метки (обозначения) поля ввода – сверху (lpAbove), снизу (lpBelow), слева (lpLeft) или справа (lpRight). Свойство Caption является составной частью комплексного свойства EditLabel.