
- •Глава 4. Базовые компоненты интерфейса
- •4.1. Компонент форма
- •4.1.1. Основные свойства формы
- •4.1.2. Разновидности форм
- •4.1.3. События формы
- •4.1.4. Методы формы
- •4.2. Создание пиктограммы для приложения
- •4.3. Общие свойства и события визуальных компонентов
- •4.3.1. Иерархия классов Delphi
- •4.3.1. Ключевые свойства элементов управления
- •4.3.2. Виды событий для элементов управления
- •4.4. Определение принадлежности к классу и приведение типов
- •4.5. Компоненты для отображения текста
- •4.5.1. Компонент метка Label
- •4.5.2. Компонент текстовая метка StaticText
- •4.6. Кнопки
- •4.6.1. Стандартная кнопка Button
- •4.6.2. Кнопка с рисунком BitBtn
- •4.6.3. Кнопка с фиксацией SpeedButton
- •4.7. Image – компонент для работы с изображениями
- •Image1.Picture.LoadFromFile('картинка.Bmp);
- •Interface
- •Implementation
- •Interface
- •Implementation
- •4.8. Поддержка справочной службы - всплывающие подсказки
- •Контрольные вопросы
- •Лабораторная работа
4.4. Определение принадлежности к классу и приведение типов
В языке Object Pascal есть два удобных оператора: is и as.
При программировании нередко требуется определить, ссылка на объект какого именно типа находится в той или иной переменной. Для решения подобного рода задачи предусмотрен оператор is, проверяющий принадлежность объекта к заданному классу. Синтаксис оператора:
<ссылка на объект> is <название класса>
Данный оператор возвращает значение true если объект относится к указанному классу. Пример:
. . .
if obj is TButton //если obj – объект класса TButton
then obj.Capton:=’Кнопка’; //то задать заголовок
. . .
Приведение типов – это процесс, в результате которого экземпляр некоторого класса будет восприниматься как экземпляр одного из производных от него классов. Для приведения типов используется конструкция:
Тип_приведения(Имя_объекта)
Во всех обработчиках событий используется переменная Sender типа TObject, которой соответствует компонент, сгенерировавший данное событие. Один и тот же обработчик события можно назначить нескольким компонентам: если, например, назначить один обработчик нескольким кнопкам (компонентам типа TButton), то внутри обработчика можно использовать следующее приведение типов:
Edit1.Text:=Button(Sender).Caption;
Здесь тип TObject приводится к производному типу TButton, и в результате объект Sender рассматривается как кнопка. После нажатия кнопки, связанной с данным обработчиком события, ее надпись отобразиться в текстовом поле Edit1.
Для приведения объекта к требуемому классу используется также оператор as. Синтаксис оператора:
<ссылка на объект> as <название класса>
Если при приведении обратиться к методу или свойству, которого не было у класса старого объекта, но есть у класса нового объекта, то произойдет ошибка. Попытка приведения объекта к заданному классу с помощью оператора as может вызвать ошибку, в случае, если такое приведение невозможно. Поэтому перед использованием оператора as следует выяснить, возможна ли такая операция, воспользовавшись оператором is.
. . .
if Obj is TButton
then (Obj as TButton).Caption:= ’Кнопка’;
. . .
Для обращения к свойствам и методам экземпляра приведенного типа можно использовать конструкцию with..as..do. Например:
with Sender as TButton do //приводим TObject к TButton
begin
Caption:=’Кнопка’; //то же, что Sender.Caption
Width:=100; //то же, что Sender. Width
end;
4.5. Компоненты для отображения текста
4.5.1. Компонент метка Label
Компонент Label
(вкладка Standard)
предназначен для отображения надписей
на поверхности компонента (например,
формы, панели). Он представляет собой
простой текст, который не может быть
отредактирован пользователем при
выполнении программы. Ряд свойств
компонента являются свойствами общего
назначения (Width,
Height,
Font,
Color,
Name,
Caption,
Cursor,
Enabled,
Left,
Top
и др.). Другие, специфические свойства
компонента приведены в табл. 4.6.
Таблица 4.6. Основные свойства класса TLabel
Свойство |
Описание свойства |
Align |
Выравнивание границ компонента относительно объекта, который его содержит. Возможные значения: alBottom – прижать к низу; alClient – растянуть на все поле компонента; alLeft – прижать влево; alNone – положение компонента, определенное пользователем; alTop – прижать вверх и пр. |
Alignment |
Горизонтальное выравнивание текста в границах поля компонента. Возможные значения: taLeftJustify – прижать текст к левому краю; taRightJustify – прижать текст к правому краю; taCenter – выровнять текст по центру |
AutoSize |
Свойство логического типа (значения true, false), позволяющее компоненту автоматически изменять свои размеры так, чтобы полностью отобразить текст метки (Caption) с учетом установленного шрифта |
FocusControl |
Содержит имя оконного компонента, который связан с меткой клавишами быстрого вызова |
Layout |
Вертикальное выравнивание текста в границах поля компонента. Значения: tlTop – прижать вверх; tlCenter – выровнять по центру; tlBottom – прижать текст вниз |
ShowAccel Char |
Свойство логического типа, которое определяет, как отображается в надписи амперсанд (&). Если содержит значение true, то символ, следующий за амперсандом будет подчеркнут, а сам амперсанд не будет виден в надписи (символ & в тексте метки предшествует символу клавиши быстрого вызова). Если ShowAccelChar = false, то все амперсанды будут видны в надписи, а следующие за ними символы подчеркиваться не будут |
Transparent |
Свойство логического типа, позволяющее управляющее отображением фона области вывода текста, определяет прозрачность метки: true – фон метки прозрачный и не зависит от свойства Color, false – пространство метки закрашивается собственным цветом. Сделать компонент Label прозрачным может понадобиться в случаях, когда надпись размещается поверх рисунка и не должна закрывать изображение |
WordWrap |
Свойство логического типа разрешающее/запрещающее вывод надписи в несколько строк. Для вывода многострочных надписей. должны быть установлены условия: AutoSize=false, WordWrap=true |
При работе с компонентом необходимо помнить, что свойство Caption символьного типа. Поэтому, чтобы вывести в поле метки числовое значение, нужно преобразовать число в строку, например, с помощью функций IntToStr, FloatToStr или FloatToStrF:
Label1.Caption:='Корень='+FloatToStrF(x,fffixed,7,2)+'.'