Automação é um método de controlar automaticamente um aplicativo de dentro de outro aplicativo, como o código abaixo.
Procedimento CriarNovaPalavra;
var
WordObj: Variante;
começar
WordObj := CreateOleObject('Word.Basic'); {Esta função é declarada na unidade ComObj}
WordObj.AppShow;
WordObj.FileNew;
fim;
Este código abrirá o WORD e criará automaticamente um novo documento (claro, a premissa é que o WORD esteja instalado em sua máquina). Isso parece muito interessante e uma função muito útil. Então, como nosso programa também pode ter funções de automação semelhantes ao WORD? permitir que programas desenvolvidos em qualquer outra linguagem automatizem nossos programas. É muito simples implementá-lo com DELPHI.
Este artigo explicará passo a passo como desenvolver um servidor de automação simples com exemplos.
Crie um novo aplicativo comum e salve o projeto como AutoSrv.bpr Coloque um controle Edit no formulário principal e salve-o como MainForm.pas. Aqui planejamos adicionar o título da janela, a cor do formulário e controlar automaticamente o texto do. Controle de edição (é claro, isso implementa muito poucas funções, mas é suficiente para explicar como desenvolver um programa de servidor automatizado), adicione o seguinte código à janela principal: (Nota: Por favor, adicione as declarações dessas funções e procedimentos ao TForm1 sozinho área pública)
função TForm1.GetCaption: string;
começar
resultado := Self.Caption;
fim;
procedimento TForm1.SetCaption(ACaption: string);
começar
Self.Caption := ACaption;
fim;
procedimento TForm1.SetColor(AColor: TColor);
começar
Self.Color := AColor;
fim;
procedimento TForm1.SetEditText(AText: string);
começar
Self.Edit1.Text := AText;
fim;
Então vamos adicionar funções de automação a este programa, clique no botão Novos Itens, clique na guia ActiveX na janela pop-up Novos Itens, selecione Objeto de Automação, clique no botão OK e insira o Nome CoClass no Assistente de Objeto de Automação pop-up janela MyAutoSrv, o Delphi gerará automaticamente um arquivo AutoSrv_TLB.pas (biblioteca de classes) e uma unidade que implementa a classe de interface da biblioteca de classes e salvará esta nova unidade como AutoSrvClass.pas.
Agora que este programa se tornou um servidor automatizado, vamos adicionar funções de interface automatizadas a ele:
(1) Clique no menu View->Type Libray, selecione a interface IMyAutoSrv no Type Library Editor, clique em New Property, selecione sua propriedade como Read|Write, nomeie-a como Caption e defina o Type como BSTR.
(2) Clique em Novo método, nomeie-o como SetColor, clique na guia Parâmetros à direita, clique em ADICIONAR para adicionar um parâmetro à função de interface recém-adicionada, defina o nome do parâmetro como AColor e defina o tipo de parâmetro como OLE_COLOR.
(3) Clique em Novo método novamente, nomeie-o como SetEditText, adicione um parâmetro a ele usando o método acima, defina o nome do parâmetro como AText e defina o parâmetro Type como BSTR.
Finalmente, adicione o código de implementação da função de interface e está tudo bem:
Adicione MainForm na seção Uses de AutoSrvClass.pas e altere seu código para o código a seguir.
unidade AutoSrvClass;
{$WARN SYMBOL_PLATFORM DESLIGADO}
interface
usa
ComObj, ActiveX, AutoSrv_TLB, StdVcl, MainForm;
tipo
TMyAutoSrv = classe(TAutoObject, IMyAutoSrv)
protegido
função Get_Caption: WideString;
procedimento Set_Caption (valor const: WideString);
procedimento SetColor(AColor: OLE_COLOR);
procedimento SetEditText(const AText: WideString);
fim;
implementação
usa ComServ;
função TMyAutoSrv.Get_Caption: WideString;
começar
Resultado:= Form1.GetCaption;
fim;
procedimento TMyAutoSrv.Set_Caption(const Valor: WideString);
começar
Form1.SetCaption(Valor);
fim;
procedimento TMyAutoSrv.SetColor(AColor: OLE_COLOR);
começar
Form1.SetColor(AColor);
fim;
procedimento TMyAutoSrv.SetEditText(const AText: WideString);
começar
Form1.SetEditText(AText);
fim;
inicialização
TAutoObjectFactory.Create(ComServer, TMyAutoSrv, Class_MyAutoSrv,
ciMultiInstance, tmApartment);
fim.
Execute este programa uma vez e ele será registrado automaticamente como um servidor de automação. Você pode encontrar suas informações de registro relacionadas na chave primária HKEY_CLASSES_ROOT no registro.
O texto acima demonstra como desenvolver um servidor de automação, que chamaremos aqui.
Crie um novo programa, adicione um Button e declare uma variável Variant em sua área VAR: AutoSrv: variante
Em seguida, adicione o seguinte código ao Button1.
procedimento TForm1.Button1Click(Remetente: TObject);
começar
AutoSrv := CreateOleObject('AutoSrv.MyAutoSrv'); {Esta string é o nome do projeto do servidor de automação mais o nome CoClass}
Self.Caption := AutoSrv.Caption;
AutoSrv.Caption := 'HEHE';
AutoSrv.SetColor(CLRed);
AutoSrv.SetEditText('HAHA');
fim;
A função CreateOleObject retornará uma interface do tipo IDispatch. É a interface IDispatch que permite ao nosso programa fazer conexões tardias para chamadas à interface do servidor automatizado. Por exemplo, se adicionarmos um AutoSrv.Hello acima, o programa também pode ser compilado e. passado. Mas ocorrerá um erro durante a execução. A eficiência de execução do uso de Variant será mais lenta do que o uso direto da declaração da interface.
Execute e clique no botão, você pode ver que o programa de serviço automatizado está carregado, e a cor do formulário e a string em EDIT1 estão definidas de acordo com o nosso código, é muito simples?