ЛАБОРАТОРНЫЕ РАБОТЫ: ТЕОРИЯ И ЗАДАНИЯ
1.Текстовые компоненты Label, Edit, Memo. Кнопка Button
1.1. Метка Label
Иерархия:
TObject <- TPersistent <- TComponent <- TControl <-
<-TGraphicControl <- TCustomLabel
Страница Палитры Компонентов: Standard.
Назначение
Метки предназначены для размещения на экране текстовой информации, содержащей различные пояснения, названия, заголовки и т. д.
Метки в Delphi являются экземплярами класса TLabel. Класс TLabel является потомком класса TCustomLabel, в котором определены основные характеристики меток. Этот класс является непосредственным потомком класса TGraphicControl и, поэтому, реагирует только на события от мыши.
Отметим следующие свойства класса TCustomLabel.
type TAlignment = (taLeftJustify, taRightJustify, taCenter);
property Alignment: TAlignment;
свойство определяет выравнивание текста в компоненте. Оно может принимать следующие значения:
taLeftJustify | выравнивание по левому краю; |
taRightJustify | выравнивание по правому краю; |
taCenter | выравнивание по центру. |
По умолчанию происходит выравнивание по левому краю.
property AutoSize: Boolean;
если значение свойства равно True, то будет автоматически изменяться ширина и высота метки в соответствии с размещенным в ней текстом.
type TTextLayOut = (tlTop, tlCenter, tlBottom);
property LayOut: TTextLayOut;
Свойство определяет положение текста метки по вертикали:
tlTop | расположен в верхней части; |
tlCenter | расположен в центре; |
tlBottom | расположен в низу. |
property Transparent: Boolean;
Если свойство имеет значение True, то фон метки будет прозрачным по отношению к другим компонентам. По умолчанию имеет значение False.
property WordWrap: Boolean;
если свойство имеет значение True, то после заполнения текущей строки будет происходить перенос текста на новую строку. По умолчанию имеет значение False. Для вывода многострочных надписей нужно задать AutoSize = False, WordWrap = True и далее установить подходящие размеры метки.
Метка Label может отображать длинную текстовую строку своего свойства Caption в виде нескольких строк. Если это нужно, то надо установить в свойстве AutoSize значение False, далее задать увеличенные размеры метки и поместить в WordWrap значение True. Однако для отображения действительно многострочного текста нужно воспользоваться имеющимися в Delphi специальными компонентами TMemo и TRichEdit.
Основным для метки является свойство Caption, наследуемое от класса TControl. Именно сюда помещается текст, который будет выводиться на экран.
Метка обрабатывает все события, связанные с использованием мыши и перетаскиванием компонентов. Событием по умолчанию для метки является событие OnClick.
1.2. Класс TCustomEdit
Назначение
В Delphi имеется несколько компонентов, позволяющих с помощью клавиатуры вводить в программу и редактировать разнообразную символьную информацию. Все они обладают такими возможностями, как выделение, копирование, удаление, вставка фрагментов, скроллинг текста, в том случае, когда он не умещается в окне и т. д. Из всего набора редакторов мы рассмотрим строку ввода класса TEdit и редактор текста класса ТМеmо.
Большинство стандартных редакторов являются потомками класса TCustomEdit. Класс TCustomEdit, который является потомком класса TWinControl, содержит ряд характеристик, общих для всех текстовых редакторов. Наиболее важными являются следующие свойства:
property AutoSelect: Boolean; | если свойство имеет значение True (значение по умолчанию), текст будет выделяться при активизации редактора. |
property AutoSize: Boolean; | если свойство имеет значение True, то будет автоматически изменяться высота редактора в соответствии с размером шрифта. |
type TFormBorderStyle = (bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin); TBorderStyle = bsNone..bsSingle; property BorderStyle: TBorderStyle; | определяет вид границы редактора: bsSingle одинарная граница, bsNone нет границы. По умолчанию редактор имеет одинарную границу. |
type TEditCharCase = (ecNormal, ecUpperCase, ecLowerCase); property CharCase: TEditCharCase; | определяет вид букв текста: ecUpperCase прописные, ecLowerCase строчные, ecNormal смешанные. |
property MaxLength: Integer; | определяет максимальное число символов, которое можно поместить в редактор. Если значение свойства равно нулю (используется по умолчанию), то в редактор можно поместить произвольное число символов. |
property PasswordChar: Char; | задает символ, который будет отображаться вместо реально вводимых символов в редакторе. Такое поведение редактора может пригодиться, если в программе требуется использование пароля. Если значением свойства является символ с кодом 0 (значение по умолчанию), то вводимые символы отображаются без преобразования. |
property ReadOnly: Boolean; | Если свойство имеет значение True, то текст предназначен только для чтения, т. е. изменять текст нельзя. По умолчанию имеет значение False. |
В классе TCustomEdit имеется ряд методов, реализующих функции редактирования:
procedure Clear; virtual; | удаляет весь текст, помещенный в редактор. |
procedure ClearSelection; | удаляет выделенный фрагмент текста. |
procedure CopyToClipboard; | копирует выделенный фрагмент текста в буфер Clipboard. |
procedure CutToClipboard; | удаляет из текста выделенный фрагмент и помещает его в буфер Clipboard. |
procedure PasteFromClipboard; | копирует текст из буфера Clipboard в позицию курсора редактора. |
procedure SelectAll; | выделяет весь текст, содержащийся в редакторе. |
У большинства редакторов имеются встроенные локальные меню, позволяющие выполнять следующие команды:
Undo | отмена последней выполненной операции в тексте; |
Cut | вырезать выделенный фрагмент с помещением его в буфер обмена; |
Сору | скопировать выделенный фрагмент в буфер обмена; |
Paste | поместить фрагмент из буфера обмена в текст, в позицию курсора; |
Delete | удалить выделенный фрагмент; |
Select All | выделить весь текст. |
1.3. Строка ввода Edit
Иерархия:
TObject <- TPersistent <- TComponent <- TControl <- TWinControl
<- TCustomEdit
Страница Палитры Компонентов: Standard.
Назначение
Строка ввода Edit, являющаяся экземпляром класса TEdit, позволяет вводить и редактировать одну строку текста.
Класс TEdit - непосредственный потомок класса TCustomEdit и наследует все его характеристики. Основным свойством строки ввода является свойство Text:
type TCaption = string;
property Text : TCaption;
содержит символьную строку в редакторе Edit.
Символьная строка может быть помещена в свойство либо на этапе конструирования формы, либо во время выполнения программы. Чаще всего редактор используется для ввода информации. В этом случае на этапе конструирования формы в свойство Text можно поместить пустую строку, а на этапе выполнения программы извлекать из него введенные значения. Если вводятся символьные представления числовых данных, то в дальнейшем они должны быть преобразованы при помощи соответствующих подпрограмм преобразования типа.
Поскольку строка ввода является оконным элементом управления, то она обрабатывает все события от мыши и клавиатуры, события, связанные с перетаскиванием, активизацией и снятием активизации, а также событие OnChange:
property OnChange: TNotifyEvent;
возникает при изменении текста строки ввода. Является событием по умолчанию для строки ввода класса TEdit.
1.4. Текстовый редактор Memo
Иерархия:
TObject <- TPersistent <- TComponent <- TControl <- TWinControl
<-TCustomEdit <- TCustomMemo
Страница Палитры Компонентов: Standard.
Назначение
Текстовый редактор Memo может содержать в отличие от строки ввода Edit не одну, а любое число строк.
Редактор Memo является экземпляром класса ТМеmо. В свою очередь класс ТМеmо порожден непосредственно от класса TCustomMemo, в котором определены основные характеристики многострочных текстовых редакторов.
Отметим следующие свойства класса TCustomMemo:
property Lines: TStrings; | свойство классового типа TStrings. Задает список строк, помещенных в редактор. |
Класс TStrings будет рассмотрен в следующем пункте.
type TScrollStyle = (ssNone, ssHorizontal, ssVertical, ssBoth);
property ScrollBars : TScrollStyle;
Задает наличие линеек скроллинга:
ssNome | нет линеек, |
ssHorizontal | только горизонтальная линейка, |
ssVertical | только вертикальная линейка, |
ssBoth | обе линейки. |
property WantReturns: Boolean; | определяет действие клавиши Enter. Если свойство равно True, то при нажатии на клавишу Enter происходит переход на новую строку текста. В противном случае фокус ввода передается форме, а переход на новую строку в тексте осуществляется нажатием комбинации клавиш Ctrl+Enter. |
Так же, как и строка ввода Edit, многострочный текстовый редактор Memo обрабатывает все события от мыши и клавиатуры, события, связанные с перетаскиванием, активизацией и снятием активизации, а также событие OnChange, которое является событием по умолчанию.
1.5. Класс TStrings
TStrings - непосредственный потомок класса TPersistent и является абстрактным классом. Объекты этого класса представляют собой списки строк. С каждой строкой может быть связан некоторый объект, например рисунок или пиктограмма. Если со строкой не связан никакой объект, то указатель на него равен nil.
Назначение
Класс TStrings является классом общего назначения и используется для определения свойств соответствующего типа (списков строк) во многих компонентах Delphi.
Рассмотрим основные свойства класса TStrings:
property Count: Integer; | определяет число элементов в списке. |
property Objects[Index: Integer]: TObject; | определяет указатель на объект, ассоциированный со строкой с индексом Index. |
property Strings[Index: Integer]: string; | определяет строку списка с индексом Index. Индекс первой строки - 0. |
property Text: string; | содержит все строки списка, включая разделители символы возврата каретки и перевода строки (#13#10). |
Основные методы, определенные в классе TStrings:
function Add(const S: string): Integer; virtual; | добавляет строку S в список и возвращает порядковый номер этой строки в списке. |
function AddObject(const S: string; AObject: TObject): Integer; virtual; | добавляет строку S и связанный с ней объект AObject в список и возвращает индекс строки и объекта в списке. |
procedure AddStrings(Strings: TStrings); virtual; | добавляет список другого объекта Strings класса TStrings к текущему списку. |
procedure BeginUpdate; | фиксирует начало обновления списка. При этом временно прекращаются перерисовки на экране. |
procedure Clear; virtual; abstract; | удаляет все строки и указатели на объекты из списка. |
procedure Delete(Index: Integer); virtual; abstract; | удаляет из списка элемент с индексом Index. |
procedure EndUpdate; | фиксирует завершение обновления списка и при необходимости сортирует строки. |
procedure Exchange(Index1, Index2: Integer); virtual; | меняет местами два элемента списка с индексами Index1 и Index2. |
procedure Insert(Index: Integer; const S: string); virtual; abstract; | вставляет в список строку S под индексом Index. |
procedure InsertObject(Index: Integer; const S: string; AObject: TObject); | вставляет в список строку S и объект AObject под индексом Index. |
procedure LoadFromFile (const FileName: string); virtual; | загружает список из файла с именем FileName. |
procedure Move(CurIndex, Newlndex: Integer); virtual; | перемещает элемент списка из позиции CurIndex в позицию NewIndex. |
procedure SaveToFile( const FileName: string); virtual; | помещает список в файл с именем FileName. |
1.6. Кнопка Button
Иерархия:
TObiect <- TPersistent <- TComponent <- TControl <- TWinControl
<- TButtonControl
Страница Палитры Компонентов: Standard.
Назначение
Основное назначение кнопки - формирование события при нажатии на нее. Кнопка может быть размещена в любом месте формы, где есть необходимость выполнить какие-либо действия при ее нажатии. Кнопка Button является экземпляром класса TButton, предками которого являются классы TButtonControl и TWinControl. Это означает, что кнопка Button представляет собой оконный элемент управления.
В классе TButton добавлены следующие свойства:
property Cancel: Boolean;
если свойство имеет значение True, то нажатие на клавишу Esc будет эквивалентно нажатию на данную кнопку.
property Default: Boolean;
если свойство имеет значение True, то нажатие на клавишу Enter будет эквивалентно нажатию на данную кнопку, если какая-либо другая кнопка не находится в фокусе ввода.
type TModalResult = Low(Integer)..High(Integer);
property ModalResult : TModalResult;
Свойство, используемое при закрытии модальных окон (модальное окно - это окно, во время работы которого невозможен доступ к другим окнам данного приложения). Для обычных окон значение этого свойства должно быть равно mrNone.
В классе TButton определен метод Click:
procedure Click; override;
выполнение этого метода эквивалентно щелчку по кнопке, т. е. в результате его выполнения возникает событие OnClick для кнопки.
Особенностью кнопки класса TButton является то, что она не обладает свойством Color и цвет фона для нее определяется операционной системой Windows.
Кнопка класса TButton обрабатывает все события, определенные для оконного элемента управления. Событием по умолчанию для кнопки является событие OnClick.
Пример использования компонентов Label, Edit, Memo и Button
Пример 1.1. Задание - Составить программу, вычисляющую корни квадратного уравнения
а2 * х2 + а1 * х + а0=0
с произвольными коэффициентами (a2 ≠0).
Решение
1. Создадим папку D:\MyProject\Text (можно любую другую).
2. Откроем новое приложение с помощью команды главного меню File | New
Application.
3. На форме Form1 разместим следующие компоненты: четыре метки Label, три компонента Edit, один редактор Memo и две кнопки Button
Все компоненты берем со страницы Standard Палитры Компонентов.
4. Свойству Caption метки Label1 зададим значение:
Введите коэффициенты квадратного уравнения
А2 * Х^2+А1 * Х+А0 = 0
Для того чтобы текст располагался в двух строках и был выровнен по центру для метки необходимо установить следующие значения свойств:
AutoSize - False,
WordWrap - True,
Alignment - taCenter.
Размеры метки и ее местоположение можно отрегулировать вручную.
Перейдем в свойство Font и щелкнем по кнопке с тремя точками. В появившемся окне изменим размер шрифта с 8 на 10. Нажмем ОК.
5. Для меток Label2, Label3 и Label4 установим свойство Caption равным ‘А0 = ‘, ‘ А1 = ‘ и ‘ А2 = ‘ соответственно.
6. Для компонентов Edit1, Edit2 и Edit3 установим значение свойства Text равным пустой строке.
7. Для компонента Memo1 выберем свойство Lines и щелкнем по кнопке с тремя
точками. В появившемся окне Stringlist editor удалим строку ‘Memо1’. Нажмем ОК.
8. Кнопкам Button1 и Button2 установим свойство Caption равным ‘Решение’ и ‘Очистить’ соответственно.
9. Двойным щелчком активизируем кнопку Решение и для обработчика события
OnClick вставим следующие строки:
procedure TForm1.Button1Click(Sender: TObject);
var a0, a1, a2, d, x1, x2 : double;
begin
a0 := StrToFloat(Edit1.Text);
al := StrToFloat(Edit2.Text);
a2 := StrToFloat(Edit3.Text);
d := a1*a1-4*a2*a0;
if d>=0 then begin
xl := (-a1+sqrt(d))/(2*a2);
x2 := (-a1-sqrt(d))/(2*a2);
Memo1.Lines. Add(‘Результат:’);
Memo1.Lines. Add(‘x1 = ’+ FloatToStrF(x1,ffGeneral,7,2));
Memo1.Lines. Add(‘x2 = ’+ FloatToStrF(x2,ffGeneral,7,2));
end
else
Memo1.Lines. Add(‘Решений нет:’);
end;
10. Нажмем клавишу F12 и вернемся в форму. Двойным щелчком активизируем кнопку «Очистить» и в обработчик события OnClick вставим строку
Memo1.Clear;
11.Сохраним проект в папке D:\MyProject\Text и запустим приложение на выполнение, используя функциональную клавишу F9 или кнопку «зелёный треугольник». Для решения квадратного уравнения введем коэффициенты и нажмем кнопку Решение. Для очистки окна редактора нажмем кнопку «Очистить»
Полный текст сформированного модуля Unit1.pas
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1 : TLabel;
Label2 : TLabel;
Label3 : TLabel;
Label4 : TLabel;
Edit1 : TEdit;
Edit2 : TEdit;
Edit3 : TEdit;
Memo1 : TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation {$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var a0,a1,a2,d, x1,x2 : double;
begin
a0 := StrToFloat(Edit1.Text);
a1 := StrToFloat(Edit2.Text);
a2 := StrToFloat(Edit3.Text);
d := a1*a1-4*a2*a0;
if d>=0 then begin
x1 := (-a1+sqrt(d))/(2*a2);
x2 := (-a1-sqrt(d))/(2*a2);
Memo1.Lines. Add(‘Результат:’);
Memo1.Lines. Add(‘x1 =’+ FloatToStrF(x1, ffGeneral,7,2));
Memo1.Lines. Add(‘x2 =’+ FloatToStrF(x2, ffGeneral,7,2));
end
else
Memo1.Lines. Add(‘Решений нет:’);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Clear;
end;
end.


