Скачиваний:
100
Добавлен:
01.05.2014
Размер:
1.56 Mб
Скачать

Создание коллекций объектов

Как было показано выше, в серверах автоматизации MS Office широко используются коллекции объектов. Во многих случаях представляется естественным употреблять их и в собственных серверах автоматизации, например в приложениях, ориентированных на работу с документами или какими либо иными однотипными объектами.

Если вернуться к простейшему примеру, рассмотренному ранее, мы можем обнаружить в нем подходящий объект для создания коллекции - строки, содержащиеся в окне текстового редактора. Модифицируем его, добавив свойстваLines(коллекция строк) иLineCount(число строк), методы для их считывания и метод для модификации строки с указанным номером.

Код реализации вновь введенных методов для считывания вновь введенных свойств LinesиLineCountи модификации свойстваLinesбудет выглядеть следующим образом:

STDMETHODIMP TMyAutoImpl::get_LineCount (int *Value)

{

*Value = Form1->Memo1->Lines->Count;

}

STDMETHODIMP TMyAutoImpl::get_Lines (int Index, BSTR *Value)

{

if (Index >= 0 && Index <= Form1->Memo1->Lines->Count)

{

*Value = Form1->Memo1->Lines[Index];

}

else

{

*Value = "";

}

}

STDMETHODIMP TMyAutoImpl::set_Lines (int Index, BSTR Value)

{

if (Index >= 0 && Index <= Form1->Memo1->Lines->Count)

{

Form1->Memo1->Lines[Index] = Value;

}

}

Теперь модифицируем контроллер, добавив несколько дополнительных интерфейсных элементов и несколько обработчиков связанных с ними событий.

Обработчики событий, связанные с нажатием на кнопки "Get Line Count", "Get Line", "Set Line", для C++Builder выглядят следующим образом:

void __fastcall TForm1::Button11Click (TObject *Sender)

{

Edit2->Text = IntToStr (serv.LineCount);

}

void __fastcall TForm1::Button12Click (TObject *Sender)

{

serv.Lines[StrTolnt(Edit2->Text)-1] = Edit1->Text;

}

void __fastcall TForm1::Button13Click (TObject *Sender)

{

Edit1->Text = serv.Lines[StrTolnt(Edit2->Text)-1];

}

Конструкция serv.Lines[StrTolnt(Edit2->Text)-1];использована в приведенном коде потому, что элементы массива, реализующего коллекцию, нумеруются не с единицы, а с нуля, тогда как строки на экране более привычно начинать нумеровать с единицы.

Экспонируемые свойства и методы

В принципе сервер автоматизации может содержать любые свойства и методы. Однако существует спецификация Microsoft на серверы автоматизации, которой следует руководствоваться при их создании. Ниже приведены список методов и свойств, которые согласно этой спецификации, должны быть реализованы. Следует обратить внимание на то, что здесь приведены два списка - один для сервера-приложения (табл. ), а другой - для сервера-документа (табл. ). В случае SDI-приложений (Single Document Interface - однодокументный интерфейс) они могут совпадать. Но в MDI-приложениях (Multiple Document Interface - многодокументный интерфейс) необходимо создавать отдельный сервер для документа. При этом он не должен регистрироваться в системном реестре, так как документ невозможно показать без приложения.

Свойства и методы объекта автоматизации приложения

Имя

Тип/InOut

Обязатель-

Тип данных

Описание

ность(+)

Желатель-

ность(-)

ActiveDocument

Свойство/-

-

IDispatch,

Активный документ

Unassigned

Application

Свойство/-

+

IDispatch

Приложение

Caption

Свойство/+

-

BSTR

Заголовок

приложения

DefaultFilePath

Свойство/+

-

BSTR

Путь по умолчанию.

Используется для

открытия/создания

файлов по умолчанию

Documents

Свойство/-

-

IDispatch,

Коллекция

коллекция

документов

FullName

Свойство/-

+

BSTR

Путь/имя приложения

Height

Свойство/+

-

float

Высота главной формы

(режим MM_HIMETRIC)

Help

Метод

-

Показывает справку

Interactive

Свойство/+

-

VARIANT_BOOL

Изменение документов

пользователем

Left

Свойство/+

-

float

Координата левого

верхнего угла

(режим MM_HIMETRIC)

Name

Свойство/-

+

BSTR

Краткое описание

приложения

Parent

Свойство/-

+

IDispatch

= Application

Path

Свойство/-

-

BSTR

Путь к приложению

Quit

Метод

+

Закрытие приложения

Repeat

Метод

-

Повторяет последнюю

команду пользователя

StatusBar

Свойство/+

-

BSTR

Содержимое

панели состояния

Top

Свойство/+

-

float

Координата левого

верхнего угла

(режим MM_HIMETRIC)

Undo

Метод

-

Отменяет последнюю

команду пользователя

Visible

Свойство/+

+

VARIANT_BOOL

Видимость приложения

Width

Свойство/+

-

float

Ширина главной формы

(режим MM_HIMETRIC)

Свойства и методы объекта автоматизации документа из коллекции

Имя

Тип/InOut

Обязатель-

Тип данных

Описание

ность(+)

Желатель-

ность(-)

Activate

Метод

+

Делает документ активным

Application

Свойство/-

+

IDispatch

Объект приложения

Author

Свойство/+

-

BSTR

Имя автора

Close

Метод

+

Закрывает документ

Comments

Свойство/+

-

BSTR

Комментарии к документу

FullName

Свойство/-

+

BSTR

Путь и имя файла

с документами

Keywords

Свойство/+

-

BSTR

Ключевые слова

Name

Свойство/-

+

BSTR

Имя документа

NewWindow

Метод

-

Добавляет в документ

новое окно

Parent

Свойство/-

+

IDispatch

Родитель документа

Path

Свойство/-

+

BSTR

Путь к файлу документа

Print

Метод

+

Печать документа

PrintOut

Метод

-

= Print

PrintPreview

Метод

-

Показ образца печати

ReadOnly

Свойство/+

-

VARIANT_BOOL

Возможность редактирования

RevertToSave

Метод

-

Откат всех изменений

Save

Метод

+

Сохранение документа

SaveAs

Метод

+

Сохранение документа

под другим именем

Saved

Свойство/-

+

VARIANT_BOOL

документ не изменялся

с момента сохранения

Subject

Свойство/+

-

BSTR

Сводка документа

Title

Свойство/+

-

BSTR

Заголовок документа

В первой колонке таблицы указано название метода или свойства, под которым данный метод или свойство должны экспонироваться. Во второй колонке указаны тип - метод или свойство - и то, является ли свойство свойством "только для чтения" (-) или позволяет как чтение, так и запись (+). В третьей колонке указано, является ли метод/свойство обязательным для экспонирования (+) или желательным (-). В четвертой колонке указан тип данных для свойств. И наконец, в пятой колонке приведено краткое описание.

Можно заметить некоторое дублирование - например, имеются одинаковые методы PrintиPrintOut. Это связано с тем, что в Visual Basic есть внутренний методPrintи его использование может привести к путанице.

ПредыдущаяОглавлениеСледующая

ПредыдущаяОглавлениеСледующая