Это происходит при использовании сервера автоматизации Delphi, или когда
сервер автоматизации (например, word.basic) не запущен.
procedure TForm1.Button1Click(Sender: TObject);
var
V: OleVariant;
begin
V := GetActiveOleObject('Word.Basic');
V.FileNew;
V.Insert('тест');
end;
GetActiveOleObject определен в ComObj.pas. Он преобразует имя класса в guid и
передает его при вызове Windows api функции GetActiveObject.
function GetActiveOleObject(const ClassName: string): IDispatch;
var
ClassID: TCLSID;
Unknown: IUnknown;
begin
ClassID := ProgIDToClassID(ClassName);
OleCheck(GetActiveObject(ClassID, nil, Unknown));
OleCheck(Unknown.QueryInterface(IDispatch, Result));
end;
Почему ACTIVEX и активные формы иногда не
отображаются в INTERNET EXPLORER? Все, что
появляется, это .HTM-страница с пустым квадратом
и красным "X" в нем.
Вероятно, при создании ActiveForm вы выбрали
опцию лицензирования и не поместили .LIC-файл в
ваш .OCX-файл. Обычно с ActiveForms/ActiveXs
лицензирование не используется, поскольку
активные элементы в основном используются для
повышения привлекательности Интернет-сервера и
"распространяются" свободно. Чтобы выключить
лицензию времени разработки (Design-Time
Licensing), найдите секцию initialization в
вашем ActiveForm XXXImpl-файле и замените
предпоследний параметр вызова
TActiveXControlFactory.Create на пустую строку:
initialization
TActiveXControlFactory.Create( ComServer, TAnimateX,
TAnimate, Class_AnimateX, 1, '', 0);
end.
Так когда мне нужно будет использовать
Design-Time Licensing?
Ваш элемент управления должен использовать
design-time-лицензию только в случае, если вы
продаете ActiveX или ActiveForm другим
разработчикам, которые встраивают их в
продаваемые ими приложения для конечных
пользователей. То есть, элемент управления
работает в среде разработки (например, Delphi,
C++Builder, VB и пр.) только когда LIC-файл
присутствует, но это не работает когда .LIC-файл
отсутствует во время выполнения приложения без
среды разработки (например, в приложении для
конечного пользователя).
Если вы распространяете ваш ActiveX в
Интернете, то вы должны задать режим разработки
для конечного пользователя (в противоположность
передачи другим разработчикам), и вам в этом
случае не потребуется лицензия времени
разработки.
Кроме того, для показа ActiveForm необходимо
установить в Internet Explorer уровень "Active
content security" (безопасность активного
содержимого) в medium (средняя). Чтобы это
сделать, войдите в Панель Управления и щелкните
на иконке Internet. Перейдите на страницу
безопасности и нажмите на кнопку "Safety Level"
(уровень безопасности). Убедитесь в том, что
уровень находится на отметке "средний".
Примечание: Данный совет отностится только
если вы разрабатываете собственные элементы
управления. Потенциально хакерские элементы
ActiveX могут нанести вред компьютеру!
GetActiveOleObject использует интерфейс с именем IRunningObjectTable. Мы не
регистрируем это автоматически в таблице, поэтому, чтобы воспользоваться его
функциональным назначением, вы должны получить этот интерфейс и использовать его
методы для регистрации.
|