- •Проблемы, решаемые с помощью технологии com
- •Основные понятия
- •Именование com-объектов
- •Понятие интерфейса
- •Основы компиляции
- •Простейший пример использования
- •Интерфейс iUnknown
- •Еще один пример
- •Com-сервер
- •Создание "настоящего" com-сервера.
- •Фабрика классов
- •Использование фабрики классов
- •ITypeLib, iTypeInfo, библиотеки типов и информация о методах сервера. Язык idl.
- •IDispatch и вызов методов "по имени"
- •IMarshall, маршалинг и взаимодействие клиента с внутренними, локальными и удаленными серверами
- •Технология ole Внедрение и связывание объектов - ole
- •Использование ole-документов в приложениях
- •Использование свойств OleContainer
- •Создание элементов управления ActiveX Понятие ActiveX.
- •Создание элементов управления ActiveX на основе vcl-компонентов
- •Создание страниц свойств
- •Создание активных форм
- •Создание локальных серверов и контроллеров автоматизации Понятие автоматизации.
- •Создание приложения, подлежащего автоматизации
- •Превращение приложения в сервер автоматизации
- •Библиотека типов
- •Реализация методов объекта автоматизации
- •Создание контроллера
- •Раннее и позднее связывание
- •Создание контроллеров для произвольных серверов автоматизации
- •Коллекции объектов внутри серверов автоматизации
- •Использование информации из библиотек типов
- •Создание коллекций объектов
- •Экспонируемые свойства и методы
- •Процессы в Windows Процессы
- •Планирование потоков
- •Приоритеты
- •Привязка к процессорам
- •Создание процессов
- •Завершение процессов
- •Создание потоков
- •Завершение потоков
- •Wait функции
- •Синхронизация потоков
- •Синхронизация процессов
- •Взаимодействие между процессами
- •Создание внутренних серверов и контроллеров автоматизации Внутренний сервер автоматизации и передача данных
- •Создание внутреннего сервера автоматизации
- •Манипуляция ресурсами в dll
- •Работа внутреннего сервера автоматизации в многопоточном режиме Понятие многопоточности. Синхронизация
- •Класс tThread
- •Пример многопоточного приложения
- •Применение com-объектов, входящих в состав Windows Создание ярлыков
- •Использование Internet Explorer в приложениях
Использование Internet Explorer в приложениях
Microsoft Internet Explorer является СОМ-сервером, поэтому его можно использовать в своих приложениях. Поскольку начиная с версии Windows 95 OSR/2 он стал частью операционной системы, при его использовании в данной операционной системе нет необходимости добавлять в дистрибутив какие-либо модули.
Для использования Internet Explorer в приложении необходимо выбрать элемент управления TCppWebBrowserсо страницы Internet. После этого элемент управления можно поместить на форму и сделать его размер достаточно большим.
Полученный элемент управления полностью идентичен по возможностям приложению Microsoft Internet Explorer: он показывает гипертекст, графику, имеет виртуальную Java-машину, что позволяет применять скрипты и апплеты; он также поддерживает работу других элементов управления v ActiveX, использующих его как контейнер. Главные его методы - Navigate,Forward,GoBack,Search,Stopи другие - соответствуют командам, доступным в приложении Microsoft Internet Explorer. Из полезных нотификационных сообщений следует отметитьOnStatusTextChange, которое вызывается при необходимости поместить текст в строку состояния, иOnProgressChange, которое можно использовать для индикации состояния какого-либо процесса (например, загрузки содержимого). На форму нанесены кнопки: "Navigate", "Stop", "Previous", "Next", "Refresh", "Search" и Ëxplore", а также элементы:ComboBox,ProgressBarиStatusBar. Код для тестирования элемента управления ActiveXTCppWebBrowserприведен ниже:
// кнопка Navigate
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OleVariant Flags, TargetFrameName, PostData, Headers;
BSTR AD;
AnsiString S;
int N;
S = ComboBox1->Text;
N = ComboBox1->Items->IndexOf (S);
if (N < 0)
{
if (ComboBox1->Items->Count == 0)
{
ComboBox1->Items->Add (S);
}
else
{
ComboBox1->Items->Insert (0, S);
}
}
else
{
ComboBox1->Items->Exchange (0, N);
}
ComboBox1->Text = S;
AD = WideString(S);
CppWebBrowser1->Navigate (AD, Flags, TargetFrameName, PostData, Headers);
}
// кнопка Stop
void __fastcall TForm1::Button2Click(TObject *Sender)
{
CppWebBrowser1->Stop ();
}
// кнопка Previous
void __fastcall TForm1::Button3Click(TObject *Sender)
{
CppWebBrowser1->GoBack ();
}
// кнопка Next
void __fastcall TForm1::Button4Click(TObject *Sender)
{
CppWebBrowser1->GoForward ();
}
// кнопка Refresh
void __fastcall TForm1::Button5Click(TObject *Sender)
{
CppWebBrowser1->Refresh ();
}
void __fastcall TForm1::CppWebBrowser1StatusTextChange(TObject *Sender,
BSTR URL)
{
StatusBar1->SimpleText = Text;
}
void __fastcall TForm1::CppWebBrowser1ProgressChange(TObject *Sender,
long Progress, long ProgressMax)
{
ProgressBar1->Position = 100 * Progress / (ProgressMax + 1);
}
При запуске данного приложения получаем полноценный Web-браузер.
Из других полезных свойств следует отметить свойство Documents, которое объявлено какIDispatch. При использовании этого свойства можно получить информацию о последней полученной HTML-странице (ее текстовое содержание, какие команды встречались в гипертексте и т. д.) Вся эта информация не показывается пользователю Internet Explorer, но может быть полезной для программиста. Например, вместо того чтобы создавать свой интерпретатор гипертекста, можно просто воспользоваться данными возможностями.
Свойство Documentsв том виде, как оно определено, практически бесполезно, так как неизвестны команды для интерфейсаIDispatch. Но имеется вспомогательная библиотека, которая детально расшифровывает методы и свойства объектов, входящих в коллекциюDocuments. Для извлечения информации о гипертексте необходимо иметь Microsoft Internet Explorer версии 4.0 или старше.
Для начала к проекту необходимо добавить библиотеку типов Internet Explorer Scripting Object Model, которая определена в модуле MSHTML.DLL. Следует иметь в виду, что эта библиотека может быть не зарегистрирована как сервер и при выборе пункта меню C++Builder Project/Import Type Library она будет отсутствовать в списке предлагаемых библиотек. В этом случае нужно зарегистрировать ее.