Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в ООП.doc
Скачиваний:
34
Добавлен:
17.09.2019
Размер:
488.96 Кб
Скачать

Компонент tRadioGroup

 

C помощью данного компонента имеется возможность объединить несколько кнопок компонент RadioButton по функциональному назначению.

Панель переключателей позволяет проще создавать группу переключателей и облегчает определение выделенного переключателя.

Для работы с данной панелью используются следующие свойства:

Caption – заголовок панели.

Columns – свойство целого типа – число колонок (по умолчанию =1).

ItemIndex – свойство целого типа - порядковый номер выделенного переключателя. Нумерация начинается с 0. Если ни один из переключателей не выделен, то –1.

Items:TStrings;

В этом свойстве содержится список названий переключателей.

Компонент tGroupBox

TObject -> TPersistent -> TCorr]ponent -> TControl -> TWinControl -> TCustomControl -> TCustomGroupBox -> TGroupBox

Модуль STDCTRLS

Страница Палитры компонентов Standard

Единственное назначение этого компонента — служить предком (Parent) для других компонентов. Это играет роль тогда, когда они должны быть объединены в группу по какому-либо признаку. Типичный пример — радиокнопки. Когда одна из них нажимается, все остальные радиокнопки в группе (т. е. с одним значением свойства Parent) автоматически отпускаются.

Поэтому, для того чтобы на форме иметь несколько независимых групп радиокнопок, их нужно поместить на разные объекты типа TGroupBox. (Кстати, именно для решения задачи с радиокнопками есть специальный ком­понент — TRadioGroup).

Будучи потомком класса TCustomControl, TGroupBox наследует от него общие свойства, описанные ранее. Специфических свойств и методов этот компонент не имеет.

Компонент tImage

TObject -> TPersistent -> TComponent -> TControl -> TGraphicControl -> TImage

Модуль EXTCTRLS

Страница Палитры компонентов Additional

Этот компонент служит надстройкой над классом TPicture и замыкает всю иерархию графических объектов VCL. Он предназначен для показа на форме изображения: битовой карты (TBitmap), метафайла (TMetafile), значка (TIcon).

Свойство

(Pb) property Picture: TPicture;

служит контейнером для графического объекта одного из перечисленных клас­сов.

В качестве канвы используется канва объекта Picture. Graphic — только если поле Graphic ссылается на объект класса TBitmap:

(Ro) property Canvas: TCanvas;

Если это не так, то попытка обращения к свойству вызовет исключительную ситуацию EInvalidOperation, так как рисовать на метафайле или значке нельзя. Будьте внимательны с этим свойством.

Следующие три свойства определяют, как именно Tpicture располагается в рабочей области компонента:

(Pb) property AutoSize: Boolean;

— означает, что размеры компонента настраиваются по размерам содержаще­гося в нем графического объекта. Устанавливать его в True нужно перед загрузкой изображения из файла или буфера обмена;

(Pb) property Stretch: Boolean;

— если это свойство установлено в True, то изображение "натягивается" на рабочую область, при необходимости уменьшая или увеличивая свои размеры. Если оно установлено в False, то играет роль следующее свойство;

(Pb) property Center: Boolean;

— если это свойство установлено в True, изображение центрируется в пределах рабочей области. В противном случае — располагается в ее верхнем левом углу.

Что такое TColor

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

Тип TColor состоит из четырех байт. Первый байт - указатель на замену цвета (о нем поговорим позже). Второй байт - яркость красного цвета от 0 до 255 (от 00 до FF). Третий байт - яркость зеленого цвета от 0 до 255 (от 00 до FF). И, наконец, четвертый байт - яркость синего цвета, также, от 0 до 255 (от 00 до FF).

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

Поговорим теперь о первом байте - указателе на замену цвета. Итак, этот байт может принимать три различных значения - ноль ($00), единицу ($01) или двойку ($02). Что это значит:

  • Ноль ($00) - цвет, который не может быть воспроизведен точно, заменяется ближайшим цветом из системной палитры.

  • Единица ($01) - цвет, который не может быть воспроизведен точно, заменяется ближайшим цветом из палитры, которая установлена сейчас.

  • Двойка ($02) - цвет, который не может быть воспроизведен точно, заменяется ближайшим цветом из палитры, которую поддерживает текущее устройство вывода (в нашем случае - монитор).

Видимо, всегда лучше устанавливать значение первого байта равным нулю ($00), по крайней мере, так происходит при получении типа TColor при помощи функции RGB.

И, напоследок, несколько примеров:

$00FFFFFF - белый цвет;

$00000000 - черный цвет;

$00800000 - темно-красный цвет.

Класс TTimer инкапсулирует свойства и методы для работы с таймером, позволяющем осуществлять отсчеты интервалов времени. Описание класса приводится в модуле ExtCtrls поэтому для его использования необходимо указать имя данного модуля в разделе uses. Класс TTimer - невизуальный, это означает, что он не отображается на форме. Данный класс имеет два свойства:

Property Enabled: Boolean;

Устанавливается в значение True, если требуется, чтобы включился системный  генератор сообщений WM_Timer.

Property Interval: Cardinal;

Задает промежуток времени в миллисекундах между приходом сообщений.


Данные свойства позволяют управлять компонентом. СвойствоInterval задает 
период срабатывания таймера. Через заданный интервал времени после предыдущего 
срабатывания, или после программной установки свойстваInterval, или после 
запуска приложения, если значение Interval установлено во время проектирования, 
таймер срабатывает, вызывая событие OnTimer. В обработчике этого события 
записываются необходимые операции.

Если задать Interval = 0 или Enabled = False, то таймер перестает работать. 
Чтобы запустить отсчет времени надо или задать Enabled = True, если установлено 
положительное значение Interval, или задать положительное значение Interval,
если Enabled = False.

Если необходимо в некоторой процедуре запустить таймер, который отсчитал бы заданный 
интервал, например, 5 секунд, после чего надо выполнить некоторые операции и отключить 
таймер, это можно сделать следующим образом. При проектировании таймер делается 
доступным (Enabled = True), но свойство Interval задается равным0
Таймер не будет работать, пока в момент, когда нужно запустить таймер, не выполнится 
оператор

Timer1.Interval:=5000;

Через 5 секунд после этого наступит событие OnTimer. В его обработчике надо  задать оператор

Timer1.Interval:=0;

который отключит таймер, после чего можно выполнять требуемые операции.     Другой эквивалентный способ решения задачи - использование свойства Enabled.  Во время проектирования задается значение Interval = 5000 и значение  Enabled = False. В момент, когда надо запустить таймер, выполняется оператор:

Timer1.Enabled:=True;

В обработчик события OnTimer, которое наступит через 5 секунд после запуска  таймера, можно вставить оператор

Timer1.Enabled:=False;

который отключит таймер. Существует особенность использования класса TTimer вне визуальных компонентов - форм. Дело в том, что при размещении таймера на форме, для его класса будет автоматически запущен конструктор при создании формы и деструктор при ее уничтожении. При создании таймера непосредственно в процессе выполнения программы и, как следствие, использование обработчика события OnTimer, должно производиться следующим образом. Предварительно должен быть создан вспомогательный класс, содержащий одну единственную процедуру - процедуру которая будет выполняться при срабатывании таймера. type  TTimeredObject = class (TObject)    procedure TimerEvent(Sender:Tobject); end; далее опишем саму процедуру TimerEvent которая сработает по окончанию интервала времени. procedure TTimeredObject.TimerEvent(Sender:TObject); begin  TimeFinished:=true; end; Переменная  логического типа Finished должна быть объевлена как глобальная переменная, там же должна быть объявлена переменная Timer1:TTimer. Для этого в разделе interface модуля после ключевого слова var запишем var     TimeFinished:boolean;     Timer1:TTimer; В экспортируемой функции LEntry, которая собственно и реализует тот или иной метод, запишем следующие строки: function LEntry (.....) var TimeredObject:TTimeredObject; begin // устанавливаем свойство окончания цикла по времени false TimeFinished:=false;    // создаем таймер Timer1:=TTimer.Create(nil); // устанавливаем интервал Timer1.Interval:=5000; // создаем созданный нами вспомогательный объект TimeredObject:=TTimeredObject.Create; // присваиваем созданный нами обработчик методу OnClick таймера Timer1.OnClick:=TimeredObject.TimerEvent; // запускаем таймер и начинаем цикл Timer1.Enabled:=true; repeat until Timefinished<>true; end; Кратко останавлюсь на том, почему потребовалась так присваивать обработчик методу OnClick. В описании класса TTimer метод описан следующим образом property OnTimer:TNotifyEvent read FOnTimer write SetOnTimer; Вообще свойство объекта обеспечивает и/или чтение и/или запись с помощью некоторых процедур в некоторое поле класса. В данном случае полем, с которым связано свойство, является поле FOnTimer. Чтение происходит непосредственно из поля, а вот для записи данных в поле применяется специальная процедура SetOnTimer. Свойство (и естественно поле, связанное с данным свойством) имеет тип TNotifyEvent, который соотвествует наступлению некоторого события. Тип TNotifyEvent определен следующим образом: TNotifyEvent = procedure (Sender:TObject) of object; такая конструкция определяет тип данных - ссылка на процедуру принадлежащую некоторому объекту, то есть на метод объекта. Параметром процедуры является объект вызывающий данное событие. Мы определили вспомогательный класс, содержащий метод, в точности совпадающий с типом TNotifyEvent. Следовательно, свойству OnTimer можно назначить обработчик события TimerEvent.

Класс TShape

Класс TShape является непосредственным потомком класса TGraphicControl и наследует все его характеристики. Экземпляром этого класса является компонент Shape, с помощью которого можно выводить на экран статические изображения. Компонент Shape (вкладка Additional) предназначен для ото- бражения одной из простейших геометрических фигур: прямоугольни- ка, квадрата, скругленного прямоугольника, скругленного квадрата, эллипса, окружности (рис. 1.4). Любая из перечисленных геометрических фигур выводится в прямоугольник, задаваемый свойствами Left, Top (координаты левого верхнего угла прямоугольника) и Width, Height (размеры прямоугольника). Фигура полностью занимает все пространство компонента. Если задан квадрат или круг, а размеры элемента по горизонтали и вертикали отличаются, фигура чертится с размером меньшего измерения. Рис. 1.4. Вид фигуры, определяемый свойством Share Таблица 1.6. Свойства компоненты Shape Компонент Shape обрабатывает события от мыши (кроме двойного клика). Пример. Создадим простую форму и разместим на ней окруж- ность. Создадим обработчик, который позволит при нажатии клавиш вверх, вниз, вправо, влево (расположенных также на дополнительной клавиатуре) перемещать окружность по форме в соответствующем направлении:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case key of 37, 100: Shape1.Left:=Shape1.Left-2; //клавиша влево 38, 104: Shape1.Top:=Shape1.Top-2; //клавиша вверх 39, 102: Shape1.Left:=Shape1.Left+2; //клавиша вправо 40, 98: Shape1.Top:=Shape1.Top+2; //клавиша вниз end; end;