Ajuda - Busca - Membros - Calendário
Versão Completa: Paleta Servers
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
Paulo Nobre
Tenho um programa de dados em que os principais são mostrados no word, como se fosse um relatório.
Usando a paleta Servers incluo dois componentes para conectar e usar o word.
Não tenho nenhum problema nem dúvida em relação ao código. Tudo funciona redondo.
Tenho o D7 e na instalação ele pergunta quais os arquivos relativos ao word desejo instalar para a aparecer na paleta server(Office 98-2000 ou XP), como tenho o 2003 escolhi o último e tudo funciona bem como já disse. Acontece que no trabalho tenho word 2000 e desta forma, pelo programa, o word não abre nem a pau.
Aí fiz o seguinte: no uses acrecentei Word2000(intuição) e trouxe para o trabalho para testar. Para minha surpresa funcionou normalmente.

Fiquei surpreso, pois não mudei uma linha de código sequer e os componentes de conexão são para wordXP, que funciona com o meu 2003(até aí tudo bem).

Alguém, que já trabalhou com este tipo de automação, sabe explicar porque funcionou?
Micheus
Isto provavelmente ocorreu pelo fato que as versões posteriores costumam manter compatibilidade com as versões anteriores. Já o contrário não é verdade. Assim, quando você fez o Type Cast para o Word2000, o programa continuou funcionando na sua máquina (que tem uma versão posterior do Word que deve ser compativel com a 2000).
Se você abir o editor de registros (RegEdit) e verificar HKEY_CLASSES_ROOT, você constatará que estão registradas algumas versões do Word e uma "genérica" (Word.Application). Nom meu caso que tenho instalado o Office 2000:
QUOTE
HKEY_CLASSES_ROOT\Word.Application
HKEY_CLASSES_ROOT\Word.Application.8
HKEY_CLASSES_ROOT\Word.Application.9

[]s
Paulo Nobre
Obrigado pela dica Micheus, esclareceu o que pode ser.
Mas, o que significa Type Cast ?
Aproveitando, você saberia dizer porque clicando por exemplo na unit(declaração)Windows com o botão direito do mouse e depois finddeclaritions aparecem todos os códigos da unit, mas clicando em WordXp ou Word2000, ele diz que não pode encontrar?
Micheus
Typecast é algo como dizer que um determinado tipo de dados é outro (normalmente compatíveis). Não consigo encontrar palavras para lhe explicar melhor, então vou lhe dar alguns exemplos de uso:

1) Uma situação que muito uso é para flags numéricos. Numa listbox com duas opções, onde ItemIndex será 0 ou 1, quando necessito fazer algum teste, faço da seguinte maneira if LongBool(ListBox1.ItemIndex) then, da mesma forma que o inverso é verdadeiro;

2) Quando utilizo a tag de um botão, para implementar duplo estado. Então, no OnClick faço algo como TBitBtn(Sender).Tag := Ord(not Boolean(TBitBtn(Sender).Tag)); Observe que aqui utilizei um outro typecast muito comum. Todos os eventos passam Sender como parâmetro e normalmente trata-se do objeto que o gerou. Originalmente Sender é um TObject, sendo que é a classe base de todos os componentes descendem deste. Também poderia ser feito utilizando o operador "as": (Sender as TBitBtn).Tag := Ord(not Boolean((Sender as TBitBtn).Tag))

3) Outra aplicação que faço uso é quando utilizo TreeNodes. Observe que além do texto que inserimos na Treeview, podemos armazenar dados associados a cada um deles. Afunção AddChildObject(Node: TTreeNode; const S: string; Ptr: Pointer) nos permite isto. Assim você pode associar objetos a cada item bastando passar o endereço do mesmo para a função no parâmetro Ptr. Então, ao utilizar a propriedade Selected (do TreeView), você poderá acessar a propriedade Data a qual contém o ponteiro passado na função e fazer um typecast dele para a classe que você adicionou.

Tenha em mente que os tipos, apesar de diferentes, são compatíveis entre si. Caso contrário, o risco de obter erros é grande.

Quanto ao seu segundo questionamento, não saberia responder (se ninguém responder, posso tentar verificar).

[]s
Paulo Nobre
Prezado Micheus,

Muito obrigado pela sua excelente explicação.
[]s
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.