Решение: 1. Использование установщика для создания файла пакета часто увеличивает размер самой программы.
Есть два способа его использовать:
1. непосредственно поместите элемент управления Activex в программу;
2. Средство выполнения установлено в режиме реального времени по мере необходимости.
Если он используется напрямую, приложение будет автоматически поиск и создает требуемый элемент управления ActiveX во время процесса инициализации.
Добавьте новый метод в форму программы:
единица uatoregactivex;
интерфейс
Использование
Windows, сообщения, Sysutils, варианты, классы, графика, управления, формы, диалоги, Comobj;
тип
Tautoregactivexfrm = class (tform)
Процедура FormCreate (отправитель: Tobject);
Частный
{Частные объявления}
публичный
{Публичные объявления}
защищен
{Публичные объявления}
Процедура checkexception (отправитель: tobject; eabort: исключение);
конец;
вар
AutoreGactiveXFRM: TautoreGactiveXFRM;
Выполнение
{$ R *.dfm}
{-------------------------------------------------
В стандартных элементах управления ActiveX есть две функции DllRegeServer и DllunRegisterServer, которые могут быть вызваны, где функция используется для регистрации управления и удаления управления. Мы можем использовать LoadLibrary для загрузки файлов dll/ocx, использовать getProcAddress, чтобы получить указатели на DllRegeServer и dllunRegisterServer, а затем запустить эти две функции непосредственно для реализации операции регистрации и удаления управления ActiveX, тем самым заменив систему Windows regsvr32.exe для реализации Activex Зарегистрируйте и удалите управление.
------------------------------------------------------ }
{-------------------------------------------------
Описание параметра:
solefilename A Dll или ocx -имя файла;
Олеализация указывает тип регистрации: 1 Указывает регистрацию, 0 указывает удаление
Возвращение значения: true означает, что операция выполняется успешно, false означает выполнение операции.
------------------------------------------------------ }
Функция OlereGister (solefilEname: String; OleAtion: Byte): Boolean;
констант
Регистрация = 1; // Регистрация
Unregisterole = 0; // Удаление
тип
TolereGisterFunction = Функция: HRESULT;
вар
HlibraryHandle: Thandle;
hfunctionAddress: tfarProc;
Регфункция: TolereGisterFunction;
Начинать
Результат: = false;
// открыть файл и вернуть ручку DLL или OCX
hlibraryhandle: = LoadLibrary (pchar (solefilename));
if (hlibrararyhandle> 0), тогда // dllakg ocx -ручка верна
пытаться
// Вернуться к указателю функции регистрации или удаления
if (oleaction = Registerole) затем // вернуть указатель зарегистрированной функции
hfunctionAddress: = getProcAddress (hlibraryHandle, pchar ('' dllRegisterserver '' '))
else // вернуть указатель функции удаления
hfunctionAddress: = getProcAddress (hlibraryHandle, pchar ('' dllunRegeServer '' '));
if (hfunctionAddress <> nil), тогда // Существуют, существует ли регистрация или функция удаления
Начинать
Регфункция: = ToLereGisterFunction (hfunctionAddress);
Если regfunction> = 0, то // выполнить регистрацию или операцию удаления, возвратное значение> = 0 означает, что выполнение успешно
/tresult: = true;
конец;
Окончательно
Freeliabrary (HlibraryHandle);
конец;
конец;
{Tautoregactivexfrm}
Процедура tautoregactivexfrm.checkexception (отправитель: tobject;
Eabort: исключение);
Начинать
Если eabort - EolesySerror, тогда
Начинать
Если hresult (eolesyserror (eabort) .errorcode) = regdb_e_classnotreg тогда
Oleregister ('' d: /flash.ocx '', 1);
конец
еще
Application.showexception (eabort);
конец;
// Присвоение метода checkexception переменной системного приложения в событии Create основной формы.
Процедура tautoregactivexfrm.formcreate (отправитель: tobject);
вар
Demoocx: вариант;
Начинать
Application.onexception: = checkexception;
// Сгенерирована ошибкой имени имени класса?
пытаться
Demoocx: = createoleobject ('' demo.demo '');
кроме
На eabort: EolesySerror Do
Если hresult (eabort.errorrorcode) = co_e_classsstring тогда
Начинать
Если oleregister ('' d: /flash.ocx '', 1) тогда
/tdemoocx: = createoleobject ('' demo.demo '')
еще
Начинать
/tapplication.messagebox(''scontrol Регистрация не удалась, программа не будет работать нормально '', pchar ('' Control Control ''), MB_OK+MB_ICONERROR);
/tapplication.terminate;
конец;
конец;
конец;
конец;
конец.