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

7.6.6.2 Создание форм Active Form.

В элемент ActiveX можно преобразовать не только компонент VCL, но и целую форму. Причем в этом случае на форму можно помещать и невизуальные компоненты. Следовательно, в формах ActiveForm можно использовать компоненты для доступа к данным.

Никаких ограничений на действия, выполняемые в формах ActiveForm, не накладывается. Единственное, что необходимо учитывать, - то, что клиентам будут недоступны свойства, методы и события компонентов, размещенных на форме. Если такой доступ необходим, то следует добавить в класс формы свойства и методы, через которые клиент сможет изменять свойства внутренних компонентов формы.

Рассмотрим пример создания формы ActiveForm.

Очень часто тем, кто создает текстовые редакторы, приходится заниматься написанием однородных пользовательских интерфейсов и однообразных программных кодов. Достаточно часто приходится выполнять реализацию одних и тех же функций - открытия, сохранения файлов, копирования, вставки и т. д. Для устранения подобной работы можно воспользоваться технологией ActiveX, создав форму ActiveForm. создаваемая форма должна иметь одну или несколько панелей управления со стандартными кнопками ("создать", "открыть", "сохранить", "вырезать", "копировать", "вставить" и др.), а также многострочный текстовый редактор.

Выполнив команду File | New главного меню Delphi, откроем вкладку ActiveX окна диалога New Items, на которой выбираем элемент ActiveForm. Появится диалоговое окно мастера, в котором следует ввести имя компонента (New ActiveX Name), название модуля реализации (Implementation Unit), название проекта (Project Name) и тип модели - модель потока (Threading Model). Естественно, что скомпилированная динамическая библиотека будет иметь то же название, что и название проекта, однако с расширением не dll, а осх

Назовем компонент TextEditX, и одновременно с этим модуль реализации автоматически переименуется в TextEditimpl1.pas, а проект - в TextEditProj1.dpr. После нажатия кнопки ОК появится заготовка кода проекта, окно формы и все необходимые модули, а также к проекту добавится библиотека типов TextEditProj1_TLB.pas.

Новую пустую форму необходимо доработать до требуемого вида, т. е. перенести на нее необходимые компоненты и описать реакцию на требуемые события.

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

Поэтому необходимо усовершенствовать созданный нами компонент ActiveX. Для этого выполним следующие действия:

1. Откройте Редактор библиотеки типов TextEditProj1_TLB.pas.

2. Выделите интерфейс iTextEditx в иерархическом списке, затем добавьте в него новое свойство для чтения и для записи с именем Text. В списке оно отобразится в виде пары свойств - одно для чтения, другое для записи.

3. Обновите код. В модуле описания формы появятся две заготовки для описания реализации двух функций. Опишем функции:

function TTextEditX.Get_Text: OleVariant;

begin

Result:=reEdit.Lines.Text;

end;

procedure TTextEditX.Set_Text(Value: OleVariant);

begin

reEdit.Lines.Text:=VarToStr(Value);

end;

4. Добавьте новое событие onTextchanges в иерархический список к интерфейсу ITextEditXEvents.

5. Теперь наша задача - вовремя инициировать наступление этого события, т. к. реализацию буду писать программисты, пользующиеся нашим компонентом. А потому код генерации события необходимо вставить в обработчик события изменения текста в многострочном редакторе. Дважды щелкните в области окна редактора, после чего откроется заготовка процедуры реализации события. Туда следует поместить следующий код:

procedure TTextEditX.reEditChange (Sender: TOb ject);

begin

if Fevents<>nil then FEvents.OnTextChanges;

end;

Теперь разработка нашего элемента TexteditX полностью завершена. Осталось только выполнить его компиляцию (в результате которой будет создан файл TexteditX.ocx). Поскольку большая часть кода была сгенерирована автоматически, то ошибки компиляции могут возникнуть только в небольших фрагментах программы, которые мы добавляли вручную, и их обнаружение не представляет сложности. После компиляции проекта следует зарегистрировать элемент в системе и установить его в палитру компонентов Delphi IDE. Эти процедуры полностью совпадают с рассмотренными выше аналогичными процедурами для обычного компонента ActiveX. Теперь разработанный элемент ActiveForm можно использовать как обычный компонент Delphi при создании любых приложений. Более того, этот компонент можно использовать не только в Delphi, но и в любых других средствах разработки, поддерживающих использование элементов ActiveX (например, в Visual Basic).