Создание объекта из файла (внедрение)
Для создания объекта из имеющегося файла можно воспользоваться тем же окном Insert Object, как и в случае создания нового объекта. В случае внедрения пользователь устанавливает значение RadioButton-кнопки «Создать из файла», а для поиска файла щелкает на кнопке «Обзор…».
Программный способ создания объекта из файла обеспечивается методом: OleContainer-> CreateObjectFromFile (AnsiString <имя файла>, bool Iconic).
Параметры методы определяют имя исходного файла и режим отображения объекта (Iconic=true – объект в виде пиктограммы). Вот такой код можно вставить в соответствующий пункт меню:
void __fastcall TForm1::FFileClick(TObject *Sender)
{
if ( OpenDialog1->Execute() )
{
OleContainer1->CreateObjectFromFile(OpenDialog1->FileName,false);
OleContainer1->Repaint();
}
}
Метод OleContainer->Repaint() приводит к перерисовке окна контейнера и, следовательно, появлению данных объекта на экране.
Создание связанного объекта
Так же как и при внедрении создать связанный объект может или пользователь или программист.
Пользователю в окне Insert Object следует выполнить действия по выбору файла, перечисленные выше, и дополнительно установить флажок «Связь».
Программист должен воспользоваться методом: OleContainer->CreateLinkToFile (AnsiString <имя файла>, bool Iconic).
Поскольку при связывании редактировать объект можно только в отдельном окне, то для сохранения объекта пользователь может обратиться к меню сервера.
Работа с сервером
Поскольку работать с данными объекта может только программа создавшая объект (сервер), то контейнеру могут потребоваться знания о возможных действиях над объектом. Метод DoVerb (int Verb) требует выполнения одной из команд, а весь список возможных действий содержит свойство ObjectVerbs компонента контейнера. Получить этот список можно только после загрузки объекта в контейнер, и, естественно, что каждый сервер (а, следовательно, и объект) имеет свой список команд.
Константа ovShow – это пример зарезервированной OLE – команды. Использование метода DoVerb с параметром ovShow, которое было уже рассмотрено в одном из предыдущих разделов, приводит к немедленному открытию сервера.
Следующий код проявляет список возможных команд объекта в компоненте ListBox (команды нумеруются с нуля) и просит выполнить вторую команду в списке:
ListBox1->Items = OleContainer1->ObjectVerbs;
OleContainer1->DoVerb(1);
Кроме этого контейнер может попросить сервер сохранить данные объекта в виде документа в формате сервера. Для этого используется метод SaveAsDocument(<имя файла>). Этот документ в дальнейшем может обрабатываться приложением сервером без участия контейнера. Интересно, что этот метод можно использовать как для связанных так и для внедренных объектов.
При завершении работы с объектом программа может освободить OleContainer, вызвав метод OleContainer->DestroyObject() - разрушить загруженный объект. Этот метод можно вызывать перед загрузкой нового объекта или в команде меню «Файл-Выход».