Solução: 1. Usando o instalador para criar um arquivo de pacote geralmente aumenta o tamanho do programa.
Existem duas maneiras de usá -lo:
1. Coloque diretamente o controle Visual ActiveX no programa;
2. O tempo de execução é estabelecido em tempo real, conforme necessário.
Se for usado diretamente, o aplicativo pesquisará e criará o controle ActiveX necessário durante o processo de inicialização.
Adicione um novo método ao formulário do programa:
unidade uautoreGactiveX;
interface
usos
Windows, Mensagens, Sysutils, Variantes, Classes, Gráficos, Controles, Formulários, Diálogos, Comobj;
tipo
TautoreGactiveXfrm = classe (tform)
Procedimento FormCreate (remetente: Tobject);
Privado
{Declarações privadas}
público
{Declarações públicas}
protegido
{Declarações públicas}
Procedimento CHECKEXCECCOMENTO (SENVERENTE: TOBJECT; EABORT: Exceção);
fim;
var
AutoReGactiveXFRM: TautoreGactiveXFRM;
Implementação
{$ R *.dfm}
{-------------------------------------------------
Nos controles ActiveX padrão, existem duas funções DLLRegisterServer e DllunRegisterServer que podem ser chamadas, onde a função é usada para registrar o controle e desinstalar o controle. Podemos usar o LoadLibrary para carregar arquivos DLL/OCX, usar o getProcaddress para fazer com que os ponteiros dllRegisterServer e dllunregisterServer e, em seguida, executem essas duas funções diretamente para implementar a operação de registro e desinstalar os controles ActiveX, substituindo assim o regsvr32.exe do Windows System para implementar o Activex Registre e desinstale o controle.
-------------------------------------------------------- }
{-------------------------------------------------
Descrição do parâmetro:
SoleFilename A DLL ou Nome do arquivo OCX;
Oleation indica o tipo de operação de registro: 1 indica o registro, 0 indica desinstalar
Valor de retorno: true significa que a operação é executada com sucesso, false significa que a operação é executada falha
-------------------------------------------------------- }
function oleregister (solefilename: string; oleação: byte): boolean;
const
Registro = 1; // Registre
Não -registro = 0;
tipo
ToleregisterFunction = Função: HRESULT;
var
HlibraryHandle: THANDLE;
hfunctionAddress: tfarproc;
Regfunção: ToleregisterFunction;
Começar
Resultado: = false;
// Abra o arquivo e retorne o identificador DLL ou OCX
HlibraryHandle: = LoadLibrary (PCHar (SoleFileName));
se (hlibraryHandle> 0) então // Dllakg OCX Handle estiver correto
tentar
// Retornar ao Registro ou desinstalar ponteiro da função
if (oleacction = registro), então // retorne o ponteiro da função registrado
hfunctionAddress: = getProcaddress (HlibraryHandle, pchar ('' 'DllregisterServer' ')))
else // retorna o ponteiro da função de desinstalação
hfunctionAddress: = getProcaddress (hlibraryHandle, pchar ('' dllunRegisterServer ''));
if (hfunctionAddress <> nil) então // julgar se a função de registro ou desinstalação existe
Começar
Regfunção: = ToleregisterFunction (hfunctionAddress);
Se Regfunção> = 0 Então // executar o registro ou desinstalar operação, o valor de retorno> = 0 significa que a execução é bem -sucedida
/TRESULT: = true;
fim;
Finalmente
Freelibrary (HlibraryHandle);
fim;
fim;
{TautoreGactivexfrm}
procedimento tautoreGactiveXfrm.ChecKexception (remetente: TOBJECT;
Eabort: exceção);
Começar
Se o eabort é o eadsyserror, então
Começar
Se hResult (EolesySerror (eabort) .errorCode) = regdb_e_classnotreg então
Oleregister ('' d: /flash.ocx '', 1);
fim
outro
Application.ShowException (EABORT);
fim;
// Atribua o método da CheCkexception à variável de aplicativo do sistema no evento OnCreate da forma principal.
procedimento tautoreGactiveXFRM.FormCreate (remetente: Tobject);
var
Demoocx: variante; // Declaração variável
Começar
Application.Onexception: = checkexception;
// O erro da string de nome da classe é gerado?
tentar
Demoocx: = createoleObject ('' Demo.Demo '');
exceto
On Eabort: EolesySerror Do
Se hresult (eabort.errorcode) = co_e_classSstring então
Começar
Se Oleregister ('' d: /flash.ocx '', 1) então
/tdemoocx: = createoleObject ('' Demo.Demo '')
outro
Começar
/Tapplication.MessageBox('''Control Registro falhou, o programa não será executado normalmente '', PChar ('' Controle de registro ''), MB_OK+MB_ICONERROR);
/TApplication.termine;
fim;
fim;
fim;
fim;
fim.