Delphi - Segredos e Solues

CAPTULO 10
 
Comunicao com Outros Aplicativos Windows

O Windows pode ser multitarefa, ou seja, processar vrios aplicativos ao
mesmo tempo. (Apesar de que, para que isso seja realmente eficaz, os
aplicativos tm que  cooperar liberando a CPU. Lembre-se de que no
Delphi voc faz isso com o mtodo ProcessMessage do objeto Application.)
A multitarefa torna-se ainda mais til se  os diversos aplicativos
processados na rea de trabalho do Windows puderem operar entre si. Por
exemplo, vamos supor que voc pudesse escrever um programa Delphi  que
monitorasse o que uma planilha como Excel ou Lotus 1-2-3 para Windows
esto fazendo. Isso possibilitaria a utilizao do Delphi para
acrescentar um recurso que  no faz parte da planilha. Por exemplo, voc
pode querer informar ao usurio se uma quantidade importante mudou ou
atingiu um alvo. Talvez voc queira escrever um  programa que analise um
documento que est sendo escrito em um processador de textos do Windows,
como o Word para Windows, em tempo real, notificando o usurio quando
ele escreveu um determinado nmero de palavras. Tudo isso e mais 
possvel pela troca dinmica de dados (DDE) e ligao e vinculao de
objetos (OLE).

 primeira vista, a DDE parece misteriosa, mas, se voc pensar nela como
atualizao automtica da rea de Transferncia do Windows, o mistrio
deveria desaparecer.  A primeira seo deste captulo aborda a rea de
Transferncia. Se voc no gastou muito tempo utilizando a rea de
Transferncia, ver que  muito mais do que um  local passivo onde
colocar e armazenar objetos para cortar e colar. Na DDE, seu programa
Delphi essencialmente informa aos outros aplicativos o que colocar e o
que  retirar da rea de Transferncia.

NOTA: Embora voc tenha de utilizar um formato de rea de Transferncia
registrado, a DDE no utiliza a rea de Transferncia da mesma forma que
o faz uma operao  normal de cortar e colar. Qualquer dado j existente
ali no ser sobreposto, e voc pode ter vrias conversaes DDE
simultneas.

        A OLE, no Delphi,  uma maneira potencialmente ainda mais
poderosa de fazer com que os aplicativos Windows comuniquem-se por meio
do Delphi. A OLE permite-lhe  construir seus prprios aplicativos
Windows integrados como um nico projeto Delphi.

NOTA: Voc pode utilizar a chamada API WinExec para iniciar um outro
programa a partir do Delphi (verifique a ajuda on-line para sua
sintaxe).

DICA VISUAL BASIC: Uma vez que o Delphi, ao contrrio do Visual Basic,
no tem nenhum equivalente  funo SendKeys, comunicar seqncias de
teclas do Delphi para  um outro aplicativo exige algumas utilizaes bem
complicadas da API do Windows e no pode ser recomendado para a maioria
das situaes.

A rea de Transferncia

A rea de Transferncia do Windows permite-lhe permutar grficos e texto
entre os aplicativos Windows, e freqentemente  utilizada para as
operaes de cortar e  colar dentro de um determinado aplicativo
Windows. Em especial, o Delphi utiliza a rea de Transferncia para seus
recursos de edio cortar e colar, e voc pode  utilizar a rea de
Transferncia juntamente com as propriedades fornecidas mais adiante na
seo deste captulo chamada "Formatos da rea de Transferncia e
Transferncias  Grficas" para implementar recursos similares em seus
projetos.

NOTA: Voc tem que acrescentar a unidade CIipBrd  clusula uses de
qualquer projeto que utiliza a rea de Transferncia.

        Entretanto, os usurios do Microsoft Windows raramente chegam a
pensar sobre rea de Transferncia, e, se o fazem,  normalmente como um
recurso passivo  do Windows. Isso no  verdade; o observador da rea de
Transferncia  um programa independe
        Voc pode utilizar o menu Arquivo no visualizador da rea de
Transferncia para observar arquivos grficos ou para salvar o contedo
da rea de Transferncia  como um arquivo independente. Alm do mais, o
programa do visualizador da rea de Transf formato em outro. Esse  o
motivo pelo qual voc pode utilizar a rea de Transferncia para
transferir texto ao Delphi de um processador de texto no-ASCII como  o
Word para Windows.
        Uma vez que grande parte desta seo diz respeito  automao de
operaes da rea de Transferncia, voc pode querer que o visualizador
da rea de Transferncia  esteja ligado e funcionando enquanto opera com
ele. Dessa forma,  possvel olhar o  ali (automaticamente) est mesmo
l.
        A rea de Transferncia pode conter apenas um elemento do mesmo
tipo de dado por vez. Se voc enviar informao nova do mesmo formato
para a rea de Transferncia,  apagar o que estava l primeiro. Algumas
vezes, porm, voc quer ter certeza de q Para fazer isso, acrescente um
cdigo que se parea com o seguinte dentro de seu projeto:




      var
        Clipboard: TClipboard;
      begin
        Clipboard.Clear;
      end

        Como  de se esperar, isso aplica o mtodo Clear ao objeto
predefinido da rea de Transferncia. Se voc precisa enviar texto para
ou a partir da rea de  Transferncia, utilize a sua propriedade AsText,
descrita a seguir.

A Propriedade AsText da rea de Transferncia

A propriedade AsText normalmente  utilizada da seguinte forma para
obter texto da rea de Transferncia:

        StringData := Clipboard.AsText;

        Utilize AsText da seguinte forma para enviar texto  rea de
Transferncia:

        Clipboard.AsText := StringData;

        Isso envia a informao string contida na varivel ou expresso
string StringData  rea de Transferncia, eliminando qualquer texto que
tenha existido ali.

Formatos da rea de Transferncia e Transferncias Grficas

Para recuperar imagens grficas da rea de Transferncia, o Delphi tem
de saber que tipo de imagem est armazenada ali. Igualmente, para
transferir imagens  rea  de Transferncia, o programa tem de informar
 rea de Transferncia que tipo de grficos est enviando. A tabela que
segue resume essas informaes. A segunda coluna  da tabela fornece o
nome da constante que o Delphi utilizou para o formato.

        Formato - Constante Simblica

        Text (.TXT) - CF TEXT
        Mapa de bits comum (.BMP) - CF-BITMAP
        Metaarquivo Windows (.WMF) - CF METAFILEPICT
        Objeto do tipo TPicture - CF-PICTURE
        Qualquer objeto persistente - CF COMPONENT

O Mtodo HasFormat

Utilizando o mtodo HasFormat, voc pergunta a rea de Transferncia que
tipo de imagem ela est armazenando no momento. A sintaxe desse mtodo 

        Clipboard.HasFormat(Formato);

onde Formato  um dos valores dados na tabela anterior. Esse mtodo
devolve True se a imagem na rea de Transferncia tem o formato correto.
Por exemplo:
 
      if Clipboard.HasFormat(CF-BITMAP) then ShowMessage ('A rea de
Transferncia tem um mapa de bits'I;

Para recuperar uma imagem da rea de Transferncia, voc utiliza o
mtodo Assign. A sintaxe desse mtodo  assim:

      Clipboard.Assign(Mapa de bits);

onde Mapa de bits  um objeto do tipo TGrafic, TBitmsap, TMetafile,
TPicture. (Lembre-se: voc utiliza a propriedade AsText para recuperar
dados de texto da rea  de Transferncia.)




Troca Dinmica de Dados (DDE)

A maneira como a DDE funciona  que um aplicativo Windows (chamado de
cliente) informa a outro aplicativo Windows (chamado servidor) que ele
quer informaes. Tecnicamente,  uma conversa DDE se d entre duas
janelas, e, do ponto de vista de Microsoft Windows, a maioria dos
componentes (incluindo, evidentemente, os prprios formulrios)  so
janelas.
        O que voc precisa fazer  chamado de estabelecer uma
conversao DDE, ou ligao DDE. Para o Delphi, o componente
DDEServerConv pode ser utilizado para  criar um servidor DDE. Embora
tecnicamente apenas o componente DDEServerConv possa ser um ser
informao por meio de suas propriedades, de modo que isso normalmente
no  um grande problema. Em geral, a informao flui do servidor ao
cliente, embora o cliente  possa, se necessrio, enviar informaes de
volta ao servidor.
        O Windows permite a um aplicativo se empenhar em muitas
conversaes DDE ao mesmo tempo. Um aplicativo pode at mesmo
representar o papel de servidor e cliente  simultaneamente. Por exemplo,
seu projeto Delphi pode enviar informaes ao Word para  por vez.
        Voc tem de conhecer o nome do aplicativo com o qual deseja
falar. Se um aplicativo suporta DDE, o nome DDE ser fornecido na
documentao. Por exemplo,  no que diz respeito  DDE, o nome para Word
para Windows  "WinWord". O nome DDE para Excel c um servidor DDE  o
nome que voc escolheu ao transform-lo em um arquivo executvel. Se
voc est processando o projeto dentro do ambiente de desenvolvimento
Delphi,  o nome DDE  o nome do projeto, sem nenhuma extenso.
        Em seguida, voc tem de conhecer o tpico da conversao DDE.
Normalmente isso  um nome de arquivo especfico. Por exemplo, o Excel
reconhece um nome de  arquivo completo (um nome de caminho) terminando
em .XLS ou .XLC como um tpico conveniente. Isso  chamado de item da
conversao DDE. Por exemplo, se Excel  o servidor DDE, o item de uma
conversao DDE poderia ser uma clula ou grupo de clulas. Se o
componente TDDEServerConv  utilizado, a propriedade Name do componente
TDDEServerConv  o tpico. Se nenhum componente TDDEServerConv 
utilizado, o ttulo do formulrio   o tpico. O nome do componente do
TDDEserverItem  o item para uma conversao DDE.
        O componente TDDEClient pode ter dois tipos de conversaes DDE
(elos). Um TDDEClient.ConnectMode of Automatic significa que o elo 
estabelecido automaticamente  quando o formulrio com o componente
TDDEClient  criado durante o processamento. A  o mtodo OpenLink 
chamado.

Criando Elos DDE em Tempo de Projeto

Esta seo utiliza Microsoft Excel em seus exemplos. Se voc no tem
Excel, ainda assim deveria ser capaz de seguir a discusso. Tudo o que
tem de saber  que planilhas  como Excel so organizadas em linhas e
colunas e que o Excel, como o prprio Delphi, tem um menu Copy na sua
barra de menu principal com itens semelhantes.
        Para a discusso que segue, comece um projeto novo e acrescente
um componente DDECIientConv e DDEClientItem da pgina de componentes
System. Especifique  a propriedade DDEConv de DDECIientItem 1 como
DDEClientConvl. Em seguida, inicie Excel (ou im
        Para estabelecer um elo de cliente tendo o Excel como o servidor
DDE e o contedo da primeira linha e coluna como o item para esta
conversao DDE, faa  o seguinte:
        1. Mova a janela Excel e destaque (selecione) o contedo da
clula na primeira linha e primeira coluna.
        2. Do menu Edit no Excel, escolha o comando Copy.
          3. V at a janela Delphi e selecione o componente
DDECIientServ e d um clique no boto Ellipsis(...) para a propriedade
DDEService ou DDETopic no Object  Inspector.
          4. Escolha Paste Link. (Se voc seguiu os passos 1 at 3, esta
opo deveria ser ativada e a rea de Transferncia conter nossa
informao DDE.) Em seguida,  escolha OK.
        5. Selecione o componente DDEClientItem e, no ObjectInspector,
escolha a propriedade DDEItem, em seguida escolha o item de sua lista
suspensa (o contedo  da rea de Transferncia tem de permanecer
inalterado).
        6. Se o Excel no se encontra em seu caminho, posicione a
propriedade TDDEClientConv.ServiceAppliastion apontando para Excel. No
inclua a extenso (.EXE).  Por exemplo, utilize: C:\EXCEL\EXCEL e no
C:\EXCEL\EXCEL.EXE como valor dessa propriedade

NOTA: Para criar um DDE Client atualizado manualmente, acrescente apenas
o componente DDECIientConv ao formulrio. Seu aplicativo executar um
cdigo que chama o  mtodo RequestData desse componente.

        Agora voc pode verificar se o elo foi realizado com sucesso.
Para isso, volte para a janela Excel e digite alguma coisa na clula da
primeira linha e primeira  coluna e pressione ENTER. Qualquer que seja a
digitao feita ela deveria aparecer ins Text, porque os elos feitos
durante o projeto so elos automticos. Adicionalmente, todas as vezes
em que o servidor DDE atualiza a informao para um componente
DDEClientItem, o Delphi gera o evento OnChange. Isso lhe permite agir
tambm sobre a informao em tempo real.
        Observe que quando voc muda do projeto de um programa Delphi
para a sua execuo dentro do ambiente de desenvolvimento, o Delphi tem
de quebrar o elo DDE.  Muitos aplicativos tentaro automaticamente
reestabelecer o elo DDE, mas voc pode descobr de cdigo. (Veja a
prxima seo, "Elos Por Meio de um Cdigo".)
        Esse elo  permanente. Se voc salva o projeto, o Delphi
preserva a informao a respeito do elo como o valor de determinadas
propriedades. Voc vai ver  essas propriedades na prxima seo. Em
particular, tente o seguinte para o elo DDE estabelec
        1. Feche o Excel e salve o projeto Delphi.
        2. Inicie temporariamente um projeto novo.
        3. Abra o projeto Delphi com o elo DDE e pressione F9 para
processar o projeto.

        O Delphi tentar sempre iniciar o aplicativo que era o servidor
de uma conversao DDE estabelecida durante o projeto.
        Como  de se esperar, as conversaes DDE - pelo menos no que
diz respeito ao Delphi - so determinadas pelo valor de certas
propriedades. A manipulao  dos valores dessas propriedades por meio de
um cdigo tornaro as suas conversaes DDE muito o projeto.

Elos Por Meio de um Cdigo

Como exemplo para juntar todas propriedades e mtodos de ligao,
examine o projeto DEMOSWDEDEMOWDECLI.DPR. O usurio fornece o nome do
aplicativo que est agindo  como servidor DDE, como tpico, e o item.
Depois de abrir o projeto DDECLI, observe que h botes, rtulos, caixas
de edio, agrupamentos, um DDEClientConv, um  DDEClientItem e um
componente de menu para iniciar o elo bem como um para colar um elo.
        Aqui esto os manipuladores de evento doNewLink e
DDEClientChange que estabelecem o elo:
 
       procedure TFormD.doNewLink(Sender: TObjectl;
        begin
          DDECIient.SetLink (AppName.Text, TopicName.Text);
          DDECIientltem.DDEConv := DDEClient;
          DDECIientltem.DDEltem := ItemName.Text;
        end;
        procedure TFormD.DDECIientItemChange(Sender: TObjectl;
        begin
          DDEDat.Lines := DDECIientltem.Lines;
        end;

        A idia por detrs desses eventos  simples. O mtodo SetLink
estabelece o elo com o servidor e o tpico especificados. O
DDEClientItem  em seguida ligado   conversao DDEClient especificada
com SetLink. Em seguida, DDEClientItem.DDEItem  espe prov um
cdigo-exemplo para ressaltar dados e executar comandos macro.

Propriedades, Mtodos e Eventos do Componente DDE

H muitas propriedades que podem ser especificadas ao tratar com DDE.
Esta seo aborda as mais importantes. Para maiores informaes,
consulte a ajuda on-line.

Propriedades DDEServerItem

Primeiro vamos descrever as propriedades utilizadas para especificar um
servidor DDE.

        ServerConv - A propriedade ServerConv especifica o componente de
conversao do servidor DDE que deve ser associado com o componente de
item do servidor  DDE. O valor de ServerConv  o nome do componente de
conversao do servidor DDE que define a
        Lines, Text - Tanto a propriedade Lines como a Text contm os
dados de texto do servidor DDE. A diferena  que a propriedade Text
pode conter apenas 255  caracteres e a propriedade Lines  na verdade
uma lista de strings de modo que pode conter m

Mtodos DDEServerItem

Agora vamos descrever o mtodo mais importante utilizado para
especificar um servidor DDE.

        CopyToClipboard - O mtodo CopyToClipboard copia os dados de
texto especificados na propriedade Text de um componente de item do
servidor DDE para rea de  Transferncia do Windows. Em seguida, voc
pode criar um elo ativando o aplicativo de clien um comando Edit|Past
Link, ou o seu equivalente na estrutura de comando do aplicativo de
cliente DDE.

Eventos DDEServerltem

O que segue  uma discusso rpida dos eventos mais importantes para um
servidor DDE.

        OnChange - Se o valor mudado  de um componente de item do
servidor DDE, seu aplicativo pode mudar a propriedade Text do componente
de item do servidor DDE  atribuindo um valor novo para ele. O cliente
DDE pode mudar o valor passando dados (transf
        OnPokeData - Se o aplicativo de cliente DDE passa dados ao
servidor, o evento OnPokeData  acionado.

Eventos DDEServerConv

O que segue  uma discusso rpida dos eventos mais importantes que os
componentes DDE podem reconhecer.

NOTA: No h mtodos DDEServerConv e no h propriedades DDEServerConv
fundamentais.

        OnClose - Um evento OnClose ocorre quando um formulrio ou
conversao DDE  fechada.
        OnExecuteMacro - O evento OnExecuteMacro ocorre quando um
aplicativo de cliente DDE envia uma macro a um componente de conversao
do servidor DDE. Escreva  um cdigo para processar a macro no
manipulador de evento OnExecuteMacro.
        OnOpen - Um evento OnOpen ocorre quando uma conversao DDE 
aberta.

Propriedades DDECIientConv

Agora abordamos as propriedades para utilizar o Delphi como um cliente
DDE.

        ConnectMode - O valor das propriedade ConnectMode determina o
tipo de conexo que deve ser estabelecido com um servidor DDE. Se voc
utilizar ddeAutomatic, ento  estabelecido um elo quando o formulrio 
criado durante o processamento. Se voc e elo apenas depois que o Delphi
processa o mtodo OpenLink.
        DDEService - O valor da propriedade DDEService especifica o nome
do servidor DDE. Veja a documentao do aplicativo para obter
informaes de como especificar  a propriedade DDEService.
        DDETopic - O valor da propriedade DDETopic especifica o tpico
de um elo DDE. DDETopic  tipicamente um nome de arquivo utilizado pelo
aplicativo ligado  em DDEService. Veja a documentao do aplicativo para
obter informaes especficas a respeit
        FormatChars - Se o valor das propriedade FormatChars  False,
ento todos os caracteres de texto dos dados ligados do servidor DDE
aparecem nos dados ligados  no cliente DDE. Em caso de True, os
caracteres ASCII 8 (retrocesso), 9 (tab), 10 (alimen dados do cliente
DDE.
        ServiceApplication - A propriedade ServiceApplication especifica
o nome do arquivo executvel principal (e caminho, se necessrio) do
aplicativo do servidor  DDE, sem a extenso .EXE. Tipicamente, esse  o
mesmo valor que a propriedade DDEService. executvel do aplicativo do
servidor DDE. Nos dois casos, ServiceApplication tem de ser especificado
para o Delphi processar um servidor DDE inativo, para estabelecer  uma
conversao DDE, e no aparecer nos dados do cliente DDE.

Eventos DDECIientConv

Quando voc instala um cliente DDE, podem ser acionados muitos eventos.
Aqui discutiremos os eventos mais importantes.

OnClose - Um evento OnClose ocorre quando um formulrio ou uma
conversao DDE  fechada.
         OnOpen - Um evento OnOpen ocorre quando uma conversao DDE 
aberta.

Mtodos DDECIientConv

O que segue so discusses rpidas dos mtodos utilizados para instalar
uma conversao de cliente DDE.

        CloseLink - O mtodo CloseLink termina uma conversao DDE em
andamento.
        ExecuteMacro - O mtodo ExecuteMacro tenta enviar uma string de
comando macro para um aplicativo de servidor DDE.
        ExecuteMacroLines - O mtodo ExecuteMacroLines tenta enviar uma
lista de strings de comando macro a um aplicativo de servidor DDE.
        OpenLink - O mtodo OpenLink inicia uma nova conversao DDE.
        PokeData - O mtodo PokeData envia dados a um aplicativo do
servidor DDE.  utilizado para enviar uma string de at 255 caracteres.
        PokeDataLines - O mtodo PokeDataLines envia dados a um
aplicativo do servidor DDE.  utilizado para enviar uma string com mais
de 255 caracteres. RequestData - O mtodo RequestData solicita dados de
um servidor DDE.
        SetLink - O mtodo SetLink especifica o servio e o tpico de
uma conversao DDE e tenta abrir o elo se ConnectMode  ddeAutomatic. O
parmetro Service  define o servio DDE e  atribudo  propriedade
DDEService. O parmetro Topic define o tpic

Propriedades DDEClientltem

Quando voc especifica um cliente DDE, h diversas propriedades que voc
talvez precise especificar. Aqui esto as discusses das propriedades
mais importantes. 

        DDEConv - O valor da propriedade DDEConv especifica o nome de um
componente de conversao do cliente DDE que deve ser associado com o
componente de item  do cliente DDE.
        DDEItem - O valor da propriedade DDEItem especifica o item (isto
, que dado realmente deve ser passado do servidor ao cliente) em uma
conversao DDE. Veja  a documentao do aplicativo para obter
informaes especficas a respeito da especifica
        Lines, Text - Tanto a propriedade Lines como a Text contm os
dados de texto do servidor DDE. A diferena  que a propriedade Text
pode conter apenas 255  caracteres e a propriedade Lines  na verdade
uma lista de strings de modo que pode conter m

NOTA: O componente DDEClientltem no tem nenhum mtodo.

Eventos de DDEClientItem

Muitos eventos podem ser acionados quando voc instala um cliente DDE. O
mais importante  o evento OnChange, que discutiremos a seguir.

        OnChange - O Delphi aciona um evento OnChange quando o valor da
propriedade Text de um componente de item do cliente DDE muda. O
aplicativo servidor DDE  atualiza continuamente a propriedade Text do
componente de item do cliente DDE.

OLE

OLE, que originalmente significava ligao e vinculao de objetos, 
uma tecnologia que comeou complementando e estendendo a troca dinmica
de dados. (Agora   simplesmente OLE e no significa nada. ) Por
exemplo, OLE vai alm da DDE no sentido de que, em vez de apenas
transferir informaes, as informaes agora podem  ser representadas da
mesma forma que apareceriam no aplicativo de origem.
        H duas verses de OLE. O OLE 1.0 permite ao usurio ativar um
objeto OLE que foi criado com um aplicativo de servidor OLE 1.0. Em
seguida, o aplicativo  servidor abre em sua prpria janela no primeiro
plano, e toma conta do foco. O aplicativo de 
        O OLE 2.0 permite ao usurio ativar um objeto OLE que foi criado
com um aplicativo de servidor OLE 2.0. Nesse caso, o menu e a barra de
ferramentas do servidor  substituem aqueles no continente OLE. Ento o
objeto OLE pode ser editado a partir da  OLE. No OLE 2.0, as planilhas
aparecem como planilhas, os documentos de processadores de texto
aparecem como apareceriam em um processador de textos, e assim por
diante. Quando voc acrescenta um componente de continente OLE ao seu
projeto Delphi, voc d ao usurio uma ponte para um outro aplicativo
Windows. O Delphi no  lhe permite criar servidores OLE 2.0, apenas
continentes OLE.

NOTA: Para ativar o suporte OLE in-loco, em um aplicativo Delphi voc
tem de fazer uma conexo com um servidor OLE que suporta ativao local.
Seu formulrio principal  tem de ter um MainMenu (Menu Principal) e o
cdigo necessrio para tratar a negociao de menu.

        H trs partes no OLE. Os objetos so os dados fornecidos pelos
aplicativos Windows que suportam OLE - por exemplo, uma planilha Excel
(ou, mais precisamente,  parte de uma planilha Excel). Para compreender
a ligao, imagine que voc faz parte do grupo trabalhando neste livro.
Alm do autor, h outras pessoas envolvidas, como um editor tcnico, um
copy e um revisor de provas. O mtodo de trabalho mais eficiente para
seu grupo seria o de mantex uma nica cpia do documento e fazer com que
cada pessoa envolvida  fosse capaz de se ligar a ela e fazer correes.
Continuaria existindo apenas uma cpia do documento (em um servidor
central) envolvido; dessa forma, seu grupo no  precisa se preocupar
sobre perda de mudanas importantes. (Em outras palavras, ele permite
que sejam realizados trabalhos em "paralelo" em vez de em "srie".) Com
um objeto ligado, os dados permanecem no aplicativo que o criou. Pense
na ligao como ligar uma corrente a dados preexistentes - como qualquer
objeto encadeado,  voc pode realizar mudanas puxando na corrente.
Tecnicamente, o que a ligao faz  inserir um posicionador no
aplicativo Delphi e uma imagem dos dados  armazenada  no componente
continente OLE.
        A idia da parte vinculada do OLE  que voc cria documentos que
integram vrios aplicativos Windows sob um nico teto. Vinculao em OLE
2 permite ao componente  manter os dados do objeto dentro de si prprio.
Quando o Delphi ativa o componente c utilizar o poder do aplicativo para
modificar localmente os dados.

NOTA: Agora existe um novo tipo de OLE - a Microsoft o chama de
automao OLE. A automao OLE permite-lhe utilizar a linguagem
subjacente de um outro aplicativo  para fazer o seu controle. O Delphi
no suporta ainda a automao OLE.

Uma das principais idias por detrs da introduo do OLE foi a
Microsoft desejar que os usurios parassem de pensar nos aplicativos
como sendo soberanos. Em vez  disso, eles querem que os usurios pensem
nos documentos em si como o centro de tudo. Por exemplo, vamos supor que
voc esteja preparando um relatrio complicado  que utiliza dados de uma
planilha e um pacote grfico. Voc quer que partes do documento estejam
sob controle do processador de texto e partes sob controle da planilha.
Em OLE 2, o outro aplicativo temporariamente passa a trabalhar com os
dados vinculados no controle. Quando voc vincula um objeto em um
controle de cliente OLE,  ento nenhum outro aplicativo pode acessar os
dados (em oposio  ligao, onde podem). Alm do mais, o aplicativo
que criou os dados vinculados  automaticamente  iniciado sempre que o
usurio trabalha com eles.

Utilizando OLE

Quando voc acrescenta um componente continente OLE aos seus projetos
Delphi, voc cria o que  chamado de documento composto OLE. Um
componente continente OLE   uma das ferramentas fornecidas com o
Delphi. O componente est localizado na pgina System da paleta
Componente (o cone  rotulado "OLE").
        Ao contrrio do DDE, no Delphi 1.0 seu projeto Delphi pode ser
apenas o aplicativo cliente (ou continente) que recebe a informao do
aplicativo servidor  (fonte) que a envia. Com OLE, seu projeto Delphi
recebe a informao e serve como cliente. ( de cliente OLE e no permite
a um aplicativo Delphi tornar-se um servidor OLE.)
        Alguma terminologia importante para tratar com OLE  explicada
nas prximas sees.

        Classes OLE - Classes OLE so os aplicativos que produzem o
objeto OLE. Qualquer aplicativo que suporta OLE tem um nome de classe
OLE nico. Por exemplo,  "WordDocument" ou "ExcelWorksheet". (Nomes de
classe podem ser sensveis  caixa.) Voc pode nas reticncias da
propriedade ObjClass na janela Object Inspector.
        Documentos OLE - Documentos OLE so os arquivos fontes que
contm os dados para os objetos OLE. Esses podem ser um documento Word
ou uma planilha Excel.  Voc pode obter uma lista com os nomes de classe
disponveis dando um clique nas reticncias 
        Itens OLE - Itens OLE so quaisquer dados com que o componente
continente OLE pode trabalhar. Podem ser um nico grfico, um grupo de
clulas em uma planilha,  uma planilha inteira, ou parte ou todo o
documento originado de um processador de texto nas reticncias da
propriedade ObjItem na janela do Object Inspector. #Utilizando o OLE 2
em Tempo de Projeto

Comparado ao OLE 1.0, criar ligaes ou vinculaes durante o projeto 
simples ao OLE 2. Essencialmente, voc precisa apenas trabalhar com as
caixas de dilogo  que sero descritas nesta seo.
        Se voc acrescentou um componente de continente OLE a um
formulrio, dar um clique nas reticncias da propriedade ObjClass
apresenta a caixa de dilogo Insert  Object, conforme mostrado na Figura
10.1. (Quanto mais aplicativos voc tiver, maior se Windows aos quais
voc pode se ligar. Voc pode fazer com que o objeto se apresente como
um cone ou com os dados visveis no componente OLE. Os dois botes de
rdio  da extrema esquerda determinam se voc vai trabalhar com um
arquivo existente criado pelo aplicativo (um objeto ligado) ou quer que
o outro aplicativo crie um de  novo (um objeto vinculado). Se voc optar
por ligar o controle escolhendo a opo Create from File, a caixa de
dilogo se parece com aquela da Figura 10.2. Voc  pode dar um clique no
boto Browse para abrir uma caixa de dilogo que lhe permite pegar o
arquivo. Quando voc tiver feito isso, verifique a caixa Link na Figura
10.2.

Figura 10.1 A caixa de dilogo Insert Object do OLE com o boto de rdio
Create New ativado

NOTA: Voc pode dar um clique no boto Cancel se quiser especificar as
propriedades OLE por meio de um cdigo. Voc no precisa utilizar essa
caixa de dilogo para  trabalhar com o OLE. De fato, se voc cria um
arquivo executvel com uma conexo OLE feita durante o projeto, o
arquivo ser muito maior do que se voc criar a conexo  durante o
processamento com cdigo.

Figura 10.2 A caixa de dilogo Insert Object do OLE com o boto de rdio
Create from File ativado.

Paste Special

Algumas vezes voc quer criar objetos ligados ou vinculados utilizando a
informao armazenada na rea de Transferncia do Windows para
determinar as propriedades  ObjDoc e ObjItem. Para fazer isso, primeiro
voc tem de copiar os dados do aplicativo para a rea de Transferncia
utilizando o comando Copy do aplicativo. Em seguida,  voc precisa
utilizar a caixa de dilogo Paste Special, que est disponvel durante o
projeto, dando um clique nas reticncias da propriedade ObjItem quando o
foco  se encontra no componente OLE. Essa caixa de dilogo examina
automaticamente o contedo da rea de Transferncia para determinar as
propriedades OLE necessrias.  A Figura 10.3 mostra a caixa de dilogo
Paste Special. Se voc quer criar um objeto vinculado; d um clique no
boto de rdio Paste; para um objeto ligado, escolha  Paste Link e
depois d um clique em OK.

Figura 10.3 A caixa de dilogo Paste Special.

Propriedades do OLE

Como  de se esperar, a caixa de dilogo apenas simplifica a
especificao das propriedades do componente OLE. Voc consegue sempre
mud-los pela janela Object Inspector  ou pelo cdigo (e  claro que
voc ter que fazer isso para ativar o OLE durante o processamento).
        A propriedade AutoSize permite-lhe mudar a aparncia do controle
durante o processamento. Se o valor  False, ento o controle corta os
dados exibidos durante  o processamento. Especifique o valor dessa
propriedade em True para que o controle redi
        A caixa de dilogo Insert Object que aparece tambm especifica a
propriedade ObjClass crucial, que especifica o aplicativo que contm os
dados. A propriedade  ObjDoc fornece o nome do objeto ligado ou do
arquivo que deve ser utilizado como modelo  ligados para especificar com
que parte do documento ligado o aplicativo Delphi pode trabalhar. (Por
exemplo, o intervalo de uma planilha pode ser indicado especificando
essa propriedade em "R1C1:R1C10".)

Criando Conexes OLE por Meio de Cdigo

Agora que voc j est familiarizado com a terminologia OLE, vamos
utilizar o projeto DEMOS\OLE2\OLE2DEMO.DPR para examinar a ligao a
objetos durante o processamento.  O projeto OLE2DEMO tem um formulrio
chamado OLE2WIN com um componente MainMenu, juntamente com um boto e um
componente continente OLE. O componente MainMenu cuida  das negociaes
de menu necessrias, quando ocorre uma ativao interna, especificando a
propriedade GroupIndex de determinados itens de menu. O servidor OLE
pode  intercalar at trs grupos de itens de menu. Cada grupo 
distinguido por um ndice de grupo nico e pode conter qualquer nmero
de comandos de menu. A prxima tabela  resume os grupos de item de menu
que o aplicativo servidor OLE pode intercalar.

        Grupo - ndice - Descrio

         Edit - 1 - Item(ns) de menu do servidor para editar o objeto
OLE ativo.
        View - 3 - Item(ns) de menu do servidor para modificar a vista
do objeto OLE.
         Help - 5 - Item(ns) de menu do servidor para acessar a ajuda
on-line do servidor.

        Quaisquer itens de menu em seu aplicativo continente que tem um
valor 1, 3 ou 5 para as propriedades GroupIndex sero substitudos pelos
itens de menu com  valores de ndice correspondentes aos do aplicativo
do servidor OLE. Os itens de menu de se sero substitudos por menus do
servidor.

NOTA: Voc tambm pode intercalar e a barra de ferramentas e barra de
status de um Servidor OLE com seu aplicativo. Veja maiores detalhes na
ajuda on-line ou no  Captulo 15 do User's Guide fornecido com o Delphi.

        Assim que OLE2DEMO estiver sendo processado, voc pode escolher
o item New do menu File para criar uma instncia nova do modelo e tornar
o modelo visvel  utilizando o seguinte cdigo:

procedure TMainWindow.NewOleWin1Click(Sender: TObject);
       var
         Child: TOLEWin;
       begin
         Child := TOLEWin.Create(Self);
         ChiId.Visible := True;
       end;

        D um clique no item Reset Object do menu Object e a caixa de
dilogo Insert Object  exibida:

       procedure TOLEWin.ResetBtnClick(Sender: TObject);
       var
         InitInfo: Pointer;
       begin if ActiveControl.InheritsFrom (TOleContainer) then
         begin
            if InsertOleObjectDlg (Self, 0, InitInfo) = True then
            begin TOleContainer(ActiveControl).PlnitInfo := InitInfo;
              ReleaseOlelnitlnfo (InitInfo);
            end;
         end;
       end;

        Agora voc pode optar por ligar ou vincular um objeto. O cdigo
anterior tambm inicializa o continente OLE com a informao apontada
pelo ponteiro InitInfo  e depois libera a memria utilizada pelo
ponteiro InitInfo. ( sempre uma boa prtica lib do Continente OLE, o
continente OLE  desativado no evento Form.OnClose:

        procedure TOLEChiId.FormClose(Sender: TObject; var Action:
TCIoseACtion);
        begin
          OLEContainer1.Active := False;
        end;

        Essa  apenas uma viso geral simples do poder do Delphi e do
OLE. Veja a ajuda on-line do Delphi e o User's Guide para obter mais
detalhes.
