В некоторых
случаях для ввода массива можно использовать компонент Memo. Компонент Memo
позволяет вводить текст, состоящий из достаточно большого количества строк,
поэтому его удобно использовать для ввода символьного массива. Компонент Memo
добавляется в форму обычным образом. Значок компонента находится на вкладке
Standard (рис. 5.4).
Рис. 5.4.
Компонент Memo
В табл. 5.3
перечислены некоторые свойства компонента Memo.
Таблица
5.3. Свойства компонента Memo
Свойство | Определяет |
Name | Имя компонента. |
Text | Текст, находящийся в поле |
Lines | Текст, находящийся в поле |
Lines | Количество строк текста в |
Left | Расстояние от левой |
Top | Расстояние от верхней |
Height | Высоту |
Width | Ширину |
Font | Шрифт, используемый для |
ParentFont | Признак наследования |
При
использовании компонента Memo для ввода массива значение каждого элемента
массива следует вводить в отдельной строке и после ввода каждого элемента
массива нажимать клавишу <Enter>.
Получить доступ
к находящейся в поле Memo строке текста можно при помощи свойства Lines, указав
в квадратных скобках номер нужной строки (строки нумеруются с
нуля).
Следующая
программа, текст которой приведен в листинге 5.5, демонстрирует использование
компонента Memo для ввода символьного массива.
Основной цикл
процедуры ввода символьного массива из компонента Memo может выглядеть
так:
for i:=l to SIZE do a [ i ]:= Memol.Lines[i];
где:
- SIZE — именованная
константа, определяющая размер массива;
- а — массив;
- Memol — имя
Memo-компонента;
- Lines — свойство
компонента Memo, представляющее собой массив, каждый элемент которого содержит
одну строку находящегося в поле Memo текста.
Форма программы
приведена на рис. 5.5. Помимо поля Memo она содержит командную кнопку (Buttonl),
при щелчке на которой выполняется ввод значений элементов массива из поля
Memo.
Рис. 5.5.
Диалоговое окно приложения Ввод массива
Листинг
5.5. Ввод массива строк из компонента Memo
unit fr_memo_; uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Label1: TLabel; procedure ButtonlClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Forml: TForm1; implementation ($R *.DFM} procedure TForml .ButtonlClick(Sender: TObject); const SIZE=5; // размер массива var a:array[l..SIZE]of string[30]; //массив n: integer; // количество строк, введенных в поле Memo i:integer; // индекс элемента массива st:string; begin n:=Memo1.Lines.Count; if n = 0 then begin ShowMessage('Исходные данные не введены!'); Exit; // выход из процедуры обработки события end; // в поле Memo есть текст if n > SIZE then begin ShowMessage('Количество строк превышает размер массива.'); n:=SIZE; // будем вводить только первые SIZE строк end; for i:=1 to n do a[i]:=Form1.Memol.Lines[i-1]; // строки Memo пронумерованы с нуля
// вывод массива в окно сообщения if n > 0 then begin st:='Введенный массив:'+#13; for i: =1 to n do st:=st+IntToStr(i)+' '+ a[i]+f13; ShowMessage(st); end; end; end.
interface
Основную работу
выполняет процедура TForm1.Button1Click, которая сначала проверяет, есть ли в
поле Memo1 текст. Если текст есть (в этом случае значение свойства Lines.Count
больше нуля), то процедура сравнивает количество введенных строк и размер
массива. Если это количество превышает размер массива, то программа изменяет
значение п, тем самым подготавливает ввод только первых SIZE
строк.
На рис. 5.6
приведен вид диалогового окна приложения Ввод массива. После щелчка на
командной кнопке Ввод появляется окно (рис. 5.7), которое содержит
значения элементов массива, полученные из Memo-поля.
Рис. 5.6.
Окно приложения Ввод массива
Рис. 5.7.
Массив, введенный из Memo-поля