Ввод и вывод в Delphi
Классы в Delphi
Лекция 24
Delphi имеет обширный набор классов. Фрагмент структуры классов Delphi приведен на рис.5.24.1.
Предком всех классов Delphi является класс TObject. Он обладает самыми общими методами присущими любому объекту Паскаля. Этот класс описывает основные принципы поведения объектов во время работы программы (создание, уничтожение, обработка событий и так далее).
Рис.5.24.1.
Класс TPersistent (наследник TObject) реализует основные методы копирования содержимого объектов.
Класс TComponent (наследникTPersistent) - это основной родительский класс для всех классов описывающих компоненты Delphi. Этот класс содержит набор общих свойств (число объектов подчиненных данному; список объектов, подчиненных данному, текущее состояние компонента и т.п.) и общих методов (добавление объекта в список компонентов; удаление объекта из списка компонентов и т.д.).
Для ввода значений данных с клавиатуры в Delphi можно использовать широкий набор интерфейсных элементов (визуальных компонентов), кроме того для накопления результатов и автоматического ввода данных можно использовать ввод и вывод с помощью файлов.
Эти средства должны обеспечивать возможность:
- создавать надписи на самой форме;
- вводить значения данных (числа, текст) в программу для обработки и выводить из программы на экран (на форму) или во внешний файл.
.5.12.1. Компонент Label (класс TLabel)
Пиктограмма: .
С помощью этого компонента обычно создают заголовки для других интерфейсных элементов, поясняющие надписи и т.п. Этот компонент можно так же использовать для вывода данных из программы. Пользователь не может редактировать данные в этом компоненте.
Замечание. Общий заголовок для формы оформляется путем размещения текста заголовка в свойстве Caption формы. Этот заголовок будет размещаться на верхней полоске формы.
Пример. Пусть в форме мы хотим сделать заголовок "Решение уравнения".
Для создания такого текста надо:
1. В палитре компонентов выбрать страницу "Стандартные";
2.В палитре компонентов со страницы "Стандартные"; выбрать кнопку с буквой А, щелкнуть по этой кнопке левой кнопкой мыши и нарисовать прямоугольник в нужном месте формы. В результате в форме появится выделенный прямоугольник с надписью "Label1".
Если посмотреть текст модуля формы, то в нем в описании класса формы появится текст
Label1:TLabel; .
3. В Инспекторе объектов активизируем вкладку свойств компонента Label1 и в свойстве Caption запишем "Решение уравнения". Можно заметить, что сразу же этот текст появится и в форме.
Наглядный вид и характеристики этого компонента можно изменять задавая различные значения свойствам компонента (полезно поэкспериментировать), например:
- свойство Color позволяет изменить цвет фона;
- свойство Font позволяет задавать различные цвет, размер и шрифт символов (для открытия диалогового окна надо щелкнуть по кнопке с тремя точками);
- если свойство Autosize имеет значение True, то размеры прямоугольника будут автоматически устанавливаться в соответствии с размером текста;
n если для свойства WordWrap установить значение True, то текст будет располагаться на нескольких строках - горизонтальный размер окна будет зафиксирован, по мере ввода текста будет изменяться вертикальный размер окна.
Для вывода текста в процессе выполнения программы надо просто присвоить имени поля значение строки символов (переменной или константы)
Label1.Caption:= S; , где S- переменная строкового типа.
5.12.2. Компонент Edit (класс Tedit).
Пиктограмма:
Это прямоугольное окно, в котором возможны ввод и редактирование текста. Можно: вводить, выводить, выделять, копировать, удалять текст.
Компонент Edit - это однострочный редактор, т.е. на экране отображается только одна строка. Записывать в Edit символы можно как со стороны пользователя, так и со стороны программы, т.е. строку Edit можно использовать как для ввода данных в программу, так и для вывода результатов из программы. В форме можно разместить несколько компонент EDIT, все они будут иметь оригинальные имена: Edit1, Edit2, и так далее. Значение вводимой строки присваивается свойству Text этого компонента.
Свойства компонента Edit.
Кроме типичного набора свойств -, Name, Enabled, Top, Height и т.п. этот компонент обладает следующими свойствами.
ReadOnly - это свойство позволяет запретить (значение True) ввод и редактирование текста со стороны пользователя.
TabOrder - задает порядок получения компонентом фокуса при нажатии клавиши Tab. По умолчанию этот порядок определяется порядком размещения компонентов в форме. Компонент с номером 0 получает фокус при открытии формы. Это свойство можно использовать только совместно со свойством TabStop.
TabStop - это свойство позволяет указать может ли компонент получать фокус (значение True) или нет.
Text - это свойство предназначено для записи в строку Edit значения вводимой строки и для чтения из строки последовательности символов. По умолчанию в этом свойстве записано EditX (X - номер компонента Edit в форме).
MaxLength - определяет максимальную длину текста строки в символах. Если значение этого свойства равно 0, то ограничений на длину текста нет.
Свойство AutoSize в окнах редактирования имеет смысл, отличный от смысла аналогичного свойства меток: автоматически подстраивается под размер текста только высота, но не ширина окна.
Окна редактирования снабжены многими функциями, свойственными большинству редакторов. Например, в них предусмотрены типичные комбинации «горячих» клавиш:
Ctrl-C — копирование выделенного текста в буфер обмена Clipboard (команда Copy),
Ctrl-X — вырезание выделенного текста в буфер Clipboard (команда Cut), Ctrl-V — вставка текста из буфера Clipboard в позицию курсора (команда Paste),
Ctrl-Z — отмена последней команды редактирования.
Правда, пользователи часто не догадываются об этих возможностях редактирования. Так что полезно напоминать им об этом соответствующими подсказками.
Свойство PasswordChar позволяет превращать окно редактирования в окно ввода пароля. По умолчанию значение PasswordChar равно #0 — нулевому символу. В этом случае это обычное окно редактирования. Но если в свойстве указать иной символ (например, символ звездочки «*»), то при вводе пользователем текста в окне будут появляться именно эти символы, а не те, которые вводит пользователь. Тем самым обеспечивается секретность ввода пароля.
При создании строки редактирования автоматически создается переменная типа String, общая форма имени которой имеет вид
имя_поля.text;.
Например, если в окно с именем Edit3 ввести последовательность символов 'ABC', то переменная Edit3.text получит значение 'ABC'. Это значение можно присвоить любой переменной типа string, например
var S: String;
. . . . . . .
S:= Edit3.Text; .
Для записи последовательности символов из программы в строку Edit1 достаточно выполнить оператор присваивания
Edit1.Text := St; (St - переменная строкового типа).
Пример. Для иллюстрации ввода и вывода данных с помощью компонента Edit создадим проект с формой, показанной на рис.5.24.1
Рис. 5.24.1 Форма для примера
То есть форма должна содержать строку Edit и две кнопки: "закрыть" и "операция". В строку Edit будем записывать символы. При нажатии на кнопку "операция" программа должна забирать введенную последовательность символов, делать с ней некоторые преобразования (например, добавлять слева и справа символ #) и возвращать результат в строку Edit.
1.Создадим форму с заголовком "пример", для этого запишем в свойстве Caption формы слово "пример".
2.Создадим две кнопки "закрыть" и "операция". Как создать кнопки мы уже рассмотрели. Заметим только - при создании второй кнопки в описание класса будет добавлен компонент
Button2:Tbutton
и метод для обработки события связанного со второй кнопкой
Procedure Button2Click(sender:Tobject);
а в конце модуля формы будет добавлена заготовка процедуры обработчика
Procedure Tform1.Button2Click(sender:Tobject);
begin
end;.
2. Создадим строку редактирования Edit. Для этого
- в палитре компонентов выберем страницу "стандартные";
- щелкнем по кнопке и нарисуем в форме прямоугольник.
На экране в форме появится выделенный прямоугольник с текстом Edit1.
Значение строки редактирования передается через свойство Text, по умолчанию в этом свойстве записано Edit1. Удалим этот текст из свойства Text.
Теперь рассмотрим как можно передавать в программу и возвращать из программы данные через окно редактирования. Так как символы и числа обрабатываются по разному, рассмотрим два примера.
5.12.3. Ввод и вывод символьных данных.
Подготовим проект, который позволяет делать следующее. Пользователь вводит в строку редактирования последовательность символов. После щелчка на кнопке "операция" программа должна:
- взять строку символов и добавить слева и справа символ # ;
- удалить из строки исходную последовательность;
- вывести в строку Edit полученную последовательность.
Для реализации этих функций необходимо в модуле формы добавить следующее (выделено жирным шрифтом):
a) в разделе переменных указать переменную (например S) строкового типа, т.е. раздел переменных будет иметь вид
Var Form1:Tform;
S : String;
б) в процедуру обработчика события для кнопки "операция" добавить текст:
procedure Tform1.Button2Click(sender: Tobject);
begin
S:=Edit1.Text; //чтение из окна в S
Edit1.Text := ''; //очистка окна
S:= '#' + S + '#'; //добавление символов слева и справа
Edit1.Text := S; //запись в окно новой строки
end;
Полный текст модуля формы приведен ниже.
unit Uni3;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form1: TForm1;
S:String;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Close
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
S:=Edit1.Text; Edit1.Text:='';
S:='#'+S+'#'; Edit1.Text:=S;
end;
end.
5.12.4. Ввод и вывод чисел.
Через строку Edit можно передавать не только текст, но и числа. При этом числа передаются как последовательности символов, поэтому при передаче чисел необходимо предусмотреть преобразование числовых символов в числа при вводе и преобразование чисел в последовательности символов при выводе. Для этого можно использовать стандартные функции:
- Val(S,m,n) - для преобразования последовательности символов (S) в число (m). Если число содержит недопустимый символ, то переменная n (целого типа) получает значение кода этого символа.
Пример: если в поле Edit1 мы ввели число, значение которого должна получить переменная А, то надо записать
Val(Edit1.Text,A,cod);
(переменная cod должна быть объявлена как данное целого типа);
- Str(Y,S) - для преобразования числа (У) в последовательность символов (S) (символьное изображение числа). В функции Str можно также указывать ширину поля (Sp) и количество десятичных знаков (dz) как и в процедуре write, т.е. форма записи функции Str имеет вид
Str(Y:Sp:dz, S);.
Например, запись вида Str(y:7:3,S1);
Str(z:14,s2);
означает, что символьное представление числа У будет занимать поле из 7 позиций и в дробной части числа будет 3 позиции, а переменная Z будет представлена в форме с буквой Е и мантисса будет содержать пять цифр в дробной части, например
-1,10765Е+0003 .
Замечание. В DELPHI определен широкий набор стандартных функций для преобразования типов. В частности есть функции выполняющие аналогичные преобразования:
FloatToStr(X) - преобразует вещественное число типа Extended в символьное представление.
IntToStr(N) - преобразует целое число типа Integer в строку символов.
StrToFloat(s) - преобразует строку s в двоичное вещественное число типа Extended.
StrToInt(s) - преобразует строку s в двоичное целое число типа Integer.
Пример. Преобразуем предыдущий пример так, чтобы при нажатии на кнопку "операция" программа:
- брала из поля Edit символьное представление числа;
- преобразовывала его в числовую форму (переменная Х);
- возводила в квадрат (Y:=X*X);
- полученный результат (У) преобразовывала в символьное представление и выводила его в окне Edit.
Для этого добавим в модуль формы следующее:
1) В раздел переменных добавим описание переменных X, Y и cod, т.е.
Var Form1:Tform;
S :String;
X,Y :Real;
cod :Integer;
2) В обработчике события для кнопки "операция" запишем
Procedure Tform1.Button2Click(sender:Tobject);
begin
Val(Edit1.Text,X,cod); {преобразование в число}
Edit1.Text:='';{очистка окна}
Y:=X*X;{вычисление У}
Str(Y,S);{преобразование числа в символы}
Edit1.Text:=S{вывод в окно}
End;
Полный текст модуля формы для этого примера приведен ниже.
unit Uni4;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form1: TForm1;
S:String;
X,Y:Real; cod:Integer;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Close
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Val(Edit1.Text,X,cod);
Edit1.Text:='';
Y:=X*X;
Str(Y,S);
Edit1.Text:=S;
end;
end.