Estimado, Bom dia. Pode ser que o negócio com o RUINDOWS seja mais embaixo: Tente usar assim:
// Crie uma function para detectar a classe que cê quer chamar: não se esqueças dos uses de 'praxe': // ComObj, ActiveX, OleServer, Word97, Word2000, ComCtrls, e sabe-se lá Deus mais o quê (esse ruindows é chato) function Detecta_ClassID(const ClassName: string): IDispatch; var ClassID: TGUID; Unknown: IUnknown; begin ClassID := ProgIDToClassID (ClassName); if Succeeded (GetActiveObject (ClassID, nil, Unknown)) then OleCheck (Unknown.QueryInterface (IDispatch, Result)) else Result := CreateOleObject (ClassName); end; Isso aí cê cria logo depois do seu {$R *.dfm ou xfm} da vida... var frmSEUFORM: TfrmSEUFORM; implementation {$R *.dfm} uses uUNITSUA1,uUNITSUA2, ...blabla...; function Detecta_ClassID(const ClassName: string): IDispatch; ............ OK! Beleza então. Depois, os seus variants ao longo do programa, porém, como OLEVARIANT: Var WinWord, Docs, Doc : OleVariant; // Por incrível que pareca estimado, crie variáveis um pouco diferentes né: // procedure TfrmSEUFORM.BtnGeraContratoClick(Sender); var MsWord, WorkSpace, Documento : OleVariant; begin MsWord := Detecta_ClassID('Word.Application'); WorkSpace := MsWord.Documents; Documento := WorkSpace.Open('c:\seudoc.doc'); {seus procedimentos} .... Documento.SaveAs('c:\seudoc.doc'); Documento.Close(); end; Tente aí e retorne pra gente saber se deu certo, valew. Saudações. --- []'s Alexandre Frase da semana: "Frase da semana: "Não atrase seu progresso com o medo de fracassar." (Nathiel Hover) -----Mensagem original----- De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Edmilson Pontes Enviada em: quinta-feira, 22 de setembro de 2005 09:13 Para: delphi-br@yahoogrupos.com.br Assunto: Re: [delphi-br] Re: Doc Word - Ainda não consegui Tentei if not Assigned (WinWord) then WinWord := CreateOleObject('Word.Application'); Mas não compila. Ocorre o erro: "[Error] UGerarContrato.pas(809): Incompatible types". --- ricknetbr <[EMAIL PROTECTED]> escreveu: --------------------------------- Antes de chamar o CreateOleObject, verifique se o mesmo ja nao esta carregado. if not Assigned (WinWord) then WinWord := CreateOleObject('Word.Application'); . . . --- Em delphi-br@yahoogrupos.com.br, Edmilson Pontes <[EMAIL PROTECTED]> escreveu > Colegas, > Tô com este problema pendente. Me ajudem pro favor. > Tenho um programa gerador de contratos, que gravar > texto num arquivo (modelo de carta) do word. > Para cada novo contrato executa o código abaixo para > criar o arquivo e salvar as alterações. > > var WinWord, Docs, Doc : Variant; > > //objetos do tipo Variant > WinWord := CreateOleObject('Word.Application'); > Docs := WinWord.Documents; > Doc := Docs.Open(c:\modelo.doc'); > {Rotinas internas do programa} > Doc.SaveAs('c:\novo.doc'); > Doc.Close(); > O programa tá funcionando beleza mas o problema é que > está consumindo muita memória, > pois para cada arquivo é criado um processo WINWORD > (no gerenciador de tarefas). > É impressionante a disproporção de memória usada em > relação aos outros processos do windows. > Como faço para resolver isso? > Para cada processo é necessário criar os três objetos. > OBS.: Utilizo thread para criar os objetos, pois > consome muito processamento também. > > Desde já agradeço qualquer ajuda, > > Edmison Pontes > > > > > > -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html