Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Визуальное программирование / Визуальное_программирование_лекция_19.doc
Скачиваний:
37
Добавлен:
07.06.2015
Размер:
165.89 Кб
Скачать
  1. Объявление класса

Вновь создаваемый класс может содержать секции (разделы), определяемые зарезервированными словами published (опубликованные), private (закрытые), protected (защищенные), public (открытые) и automated (автоматизированные). Внутри каждой секции вначале определяются поля, а затем методы и свойства.

Разделы определяют область видимости элементов описания класса. Поля, свойства и методы описанные в секции public можно вызывать в любом другом модуле программы. Секция published также не ограничивает область видимости, однако в ней перечисляются свойства, которые должны быть доступны не только на этапе исполнения, но и на этапе конструирования программы (в окне инспектора объектов). Закрытые элементы описания указанные в секции private доступны только внутри методов данного класса и подпрограммах, находящихся в том же модуле где описан класс. Секция protected (защищенные) доступна только методам самого класса, а также любым его потомкам, независимо от того, находятся ли они в том же модуле или нет. Секция automated (автоматизированные) используется только для объявления свойств и методов, которые будут добавлены к интерфейсу OLE-объектов автоматизации.

Разрешается многократно объявлять любую секцию, причем порядок следования секций значения не имеет.

Создание нового компонента начинается по команде File/New…/Component. В результате открывается диалоговое окно новый компонент (New Component).

В этом окне определяется тип класса-родителя, имя создаваемого класса, страница палитры компонентов, имя файла модуля, список каталогов, в которых выполняется поиск файла модуля.

После заполнения всех полей и нажатия кнопки Ok создается модуль QMyButton, текст которого отображается в редакторе кода. Этот модуль содержит описание класса TMyButton, созданного на основе класса TMyButton.

unit QMyButton;

interface

uses

SysUtils, Classes, QControls, QStdCtrls;

type

TMyButton = class(TButton)

private

{ Private declarations }

protected

{ Protected declarations }

public

{ Public declarations }

published

{ Published declarations }

end;

procedure Register;

implementation

procedure Register;

begin

RegisterComponents('Samples', [TMyButton]);

end;

end.

Модуль содержит процедуру Register, которая будет выполнять регистрацию нового компонента на странице Samples (образцы). Первым параметром процедуры регистрации RegisterComponents является название страницы, вторым множество классов добавляемых компонентов.

  1. Создание простых свойств

Класс содержит поля, в которых хранится информация данного класса. По соглашению имена полей начинаются с буквы “F”. Обычно поля описываются в разделе частных (private) описаний и недоступны для прямого обращения к ним. Программно доступ к значениям полей осуществляется через свойства, которые обычно имеют имена, определяющие их принадлежность к конкретному полю. Свойства, которые должны быть доступны программно, описываются в разделах published (опубликованные) и public (открытые), в противном случае их помещают в раздел protected (защищенные).

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

property <имя_свойства>: <тип_свойства> <Спецификаторы>;

Основными спецификаторами свойства являются read и write, соответственно определяющие возможность чтения и записи значения свойства. Необходимо указать хотя бы один из этих спецификаторов. После спецификатора указывается имя поля или метода. Если значение свойства непосредственно связано со значением своего поля, то в спецификаторе указывается имя этого поля.

Пример формата описания:

property <имя_свойства>: <тип_свойства> read <имя_поля> write <имя_поля>;

Если взаимосвязь между свойством и полем носит более сложный характер, то после спецификатора указывается имя метода, которые считывает или устанавливает значение свойства. Метод чтения является функцией без параметров, которая имеет тот же тип, что и тип читаемого свойства. По соглашению имя функции начинается со слова Get. Метод записи является процедурой с одним параметром, которая имеет того же типа, что и устанавливаемое свойство. По соглашению имя процедуры начинается со слова Set.

Пример формата описания:

property <имя_свойства>: <тип_свойства> read <имя_метода> write <имя_метода>;

Если отсутствует спецификатор read, то значение свойства нельзя считывать, а если не указан спецификатор write, то свойство предназначено только для чтения.

Пример. Создание простых свойств.

TMyButton = class(TButton)

private

{ Private declarations }

FMyInteger: integer;

FMyChar: Char;

FMyString: string;

protected

{ Protected declarations }

public

{ Public declarations }

published

{ Published declarations }

property MyInteger: integer read FMyInteger write FMyInteger;

property MyChar: char read FMyChar write FMyChar;

property MyString: char read FMyString write FMyString;

end;

Созданные свойства доступны в Инспекторе объектов для чтения и записи и непосредственно связаны со своими полями.