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

6.3.4.1 Свойства типа множество

Как известно из главы 3, C++Builder объявляет несколько шаблонных классов для встроенных типов Delphi, которых нет в языке C++.

В частности, типы стиля шрифта определяются следующим образом:

enum TFontStyle

{ fsBold, fsltalic, fsUnderline, fsStrikeOut } ;

typedef Set

<TFontStyle, fsBold, fsStrikeOut>TFontStyles ;

TFontStyle является перечисляемым типом. TFontStyles определен как множество — неупорядоченная коллекция типа TFontStyle. Инспектор объектов позволяет переключать булевы значения элементов множества, выбирая значения false или true. Рис. 6.4 показывает пример манипуляций свойством Style типа множество в окне Инспектора. Это свойство, определяющее основные характеристики шрифта, имеют многие компоненты, в том числе, сама форма.

Рис. 6.4. Свойство Style.

6.3.4.2 Свойства типа массив

Эти свойства имеют множественные элементы, каждый из которых соответствует некоторому индексному значению. Например, свойство Lines стандартной компоненты TMemo представляет собой индексируемый список (массив) текстовых строк, составляющих многострочное поле редактирования. В данном случае свойство Lines предоставляет пользователю естественный доступ к указанному элементу массива (строке) в большом тексте.

Листинг 6.7 содержит объявление свойства String и метода чтения GetNumberSize, возвращающего индексируемую строку массива.

class TDemoComponent : public TComponent { private:

String _fastcall GetNumberSize(int Index);

public:

property String Number[int Index] = { read=GetNumber };

// Другие объявления };

String _fastcall TDemoComponent::GetNumberSize(int Index) {

String Result;

switch (Index) {

case 0: Result = "Zero"; break;

case 100: Result = "Medium"; break;

case 1000: Result = "Large"; break;

default: Result = "Unknow size";

) : .. return Result;

}

Листинг 6. 7. Свойство типа массив и его метод чтения.

Объявление свойств типа массив имеет следующие особенности:

• Объявление свойства включает один или несколько индексов, любого типа (по числу размерностей массива). В этом состоит первое отличие от обычных массивов, где индекс всегда имеет тип int.

• Доступ к элементам массива реализуется посредством методов чтения/записи, которые имеют дополнительные параметры - индексы массива, перечисляемые в том же порядке, что и при объявлении методов. В этом состоит второе отличие от обычных массивов, где допускаются ссылки не только на отдельные элементы, но и на весь массив.

6.4 События

События представляют собой средства, с помощью которых компонента сообщает пользователю о том, что на нее оказано некоторое предопределенное воздействие. Типичные простые события — нажатие кнопки на форме или клавиши на клавиатуре. Вкладка "События" (Events) Инспектора объектов позволяет получить доступ к событиям выбранной компоненты.

6.4.1 Зачем нужны события?

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

С точки зрения прикладного программиста, событие представляет собой имя, которому можно присвоить некоторый вызываемый метод. Например, экземпляр компоненты TButton - кнопка Buttoni имеет методы для события OnClick. По умолчанию C++Builder генерирует обработчик события с именем ButtonlClick и присваивает его событию OnClick. Когда происходит нажатие кнопки, объект вызывает метод, присвоенный событию OnClick, в данном случае, ButtonlClick.

Таким образом, прикладной программист воспринимает событие как способ указания, к какому из написанных им методов должна обращаться программа, когда данное событие происходит. С точки зрения разработчика компонент, в понятии события заключено значительно большее. Автор компоненты обязан предусмотреть программный интерфейс, к которому можно подключить методы, вызываемые при определенных воздействиях на компоненту. Ваша компонента предоставляет "разъемы", в которые прикладной программист сможет вставлять специфические коды реакции на события.