Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-08-2005
Avatar de Elenita
Elenita Elenita is offline
Miembro
 
Registrado: jun 2005
Ubicación: Madrid
Posts: 56
Poder: 19
Elenita Va por buen camino
Automatizar Word Perfect mediante OLE

Hola a todos, me gustaría saber si alguien ha tenido que trabajar con Word Perfect (utilizo la version 7) desde Delphi a traves de OLE. He visto algunos ejemplos con DDE que no entiendo muy bien y también he leído que a partir de la version 7 se podía automatizar con OLE, pero no sé que librerías hay que importar, que units hay que poner en el uses, etc...
Código Delphi [-]
 procedure VerWPD(Archivo: string);
 var
   objWordPerfect  : Variant;
 begin
   try
      objWordPerfect:= CreateOleObject('WordPerfect.PerfectScript');
      objWordPerfect.AppMaximize;
      objWordPerfect.FileOpen(Archivo);
   finally
      objWordPerfect.Quit;
      objWordPerfect.free;
    end;
 end;
Este código me da error, supongo que la razón es que no he añadido ninguna unidad al uses, pero ¿cual?
Muchas gracias...
Responder Con Cita
  #2  
Antiguo 26-08-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Para usar la función "CreateOleObject" necesitas añadir la unidad "ComObj" a la cláusula uses, asi que fíjate si te falta. (En caso de que no sea así, especifica si el error te lo da al compilar o en tiempo de ejecución).

Saludos!

Última edición por jmariano fecha: 26-08-2005 a las 13:50:00.
Responder Con Cita
  #3  
Antiguo 26-08-2005
Avatar de Elenita
Elenita Elenita is offline
Miembro
 
Registrado: jun 2005
Ubicación: Madrid
Posts: 56
Poder: 19
Elenita Va por buen camino
La unidad "ComObj" está en la cláusula uses y no tengo errores de compilación, al ejecutar me da el error "Invalid Variant operation"
He trabajado con WORD y EXCEL a través de OLE, pero nunca con WordPerfect y no sé si dará más problemas o hay que tratarlo de otra forma..
Muchas gracias.
Responder Con Cita
  #4  
Antiguo 26-08-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Cita:
Empezado por Elenita
La unidad "ComObj" está en la cláusula uses y no tengo errores de compilación, al ejecutar me da el error "Invalid Variant operation"

He trabajado con WORD y EXCEL a través de OLE, pero nunca con WordPerfect y no sé si dará más problemas o hay que tratarlo de otra forma..

Muchas gracias.
Por lo que sé, ese error te lo muestra porque el objeto OLE no se está creando y la variable "objWordPerfect" contiene información inválida. (Según las pruebas que he hecho, si el objeto OLE no existiera, en el sistema, el error sería "Cadena clase no válida" y si un método no existe para tal objeto, entonces, el error sería "Método '<NombreMetodo>' no soportado...").

Prueba lo siguiente:

Código Delphi [-]
procedure VerWPD(Archivo: string);
var
  objWordPerfect : Variant;
begin
  objWordPerfect := Null;
 
  try
    objWordPerfect:= CreateOleObject('WordPerfect.PerfectScript');
    objWordPerfect.AppMaximize;
    objWordPerfect.FileOpen(Archivo);
  finally
    if not VarIsNull(objWordPerfect) then
    begin
      objWordPerfect.Quit;
      objWordPerfect.free;
    end
    else ShowMessage('Falló la creación del objeto');
  end;
end;

Si te aparece el mensaje "Falló la creación del objeto" es que, lógicamente, el objeto "WordPerfect.PerfectScript" no se te está creando. Si esto es así, entonces, o es por un problema con el mismo "WordPerfect" (puede que no se instalara bien el objeto necesario para la automatización, que falten componentes por instalar, o que la aplicación no se instaló bien) o, si no, que no existe tal objeto "WordPerfect.PerfectScript" y sea otro el que se utilice para la automatización (aqui tendrías que mirar la ayuda de "WordPerfect").

Siento no poder ayudarte mas!, pero es que los objetos de automatización dependen más de la aplicación en sí (el código, en principio, parece correcto), por lo que tendrás que mirar la ayuda del mismo "WordPerfect" para ver como manipularlo.

Chao!
Responder Con Cita
  #5  
Antiguo 29-08-2005
Avatar de Elenita
Elenita Elenita is offline
Miembro
 
Registrado: jun 2005
Ubicación: Madrid
Posts: 56
Poder: 19
Elenita Va por buen camino
He probado el código que me pasaste y efectivamente me sale el mensaje de "Falló la creación del objeto". He metido la creación del objeto en un try-except y he capturado la excepción.
Código Delphi [-]
 procedure VerWPD(Archivo: string);
 var
   objWordPerfect : Variant;
 begin
   objWordPerfect := Null;
   try
     try
       objWordPerfect:= CreateOleObject('WordPerfect.PerfectScript');
       objWordPerfect.AppMaximize;
       objWordPerfect.FileOpen(Archivo);
     except
       on E: Exception do ShowMessage(E.Message);
     end
   finally
     if not VarIsNull(objWordPerfect) then
     begin
       objWordPerfect.Quit;
       objWordPerfect.free;
     end
     else ShowMessage('Falló la creación del objeto');
   end;
 end;
El error que me aparece ahora es "Espacio de almacenamiento insuficiente para completar esta operación". Por lo que he leído en internet es un error del sistema operativo, pero sigo igual que antes.
He tratado de buscar en la ayuda de WordPerfect algo sobre la automatización OLE, pero no he tenido demasiada suerte. ¿Sabes donde podría documentarme?
Muchas gracias por todo. Un saludo.
Responder Con Cita
  #6  
Antiguo 29-08-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Saludos!

La verdad es que nunca trabajé con WordPerfect (siempre lo he hecho con Word), así que no puedo ayudarte mucho. Te aconsejaría (como solemos hacer casi todos aqui) usar Google y buscar por las palabras: wordperfect ole, a ver si hay suerte!

P.D: Por curiosidad, hice una búsqueda en Google sobre este tema y, efectivamente, parece que se utiliza el objeto "WordPerfect.PerfectScript" para controlarlo a través de OLE, así que creo que tu problema está mas relacionado con la instalación del WordPerfect en sí o con algún otro que puedas tener en Windows (esto último te lo digo por el mensaje que dices que te muestra). Por si te interesa, te dejo la dirección de la página que revisé: http://gmccomb.com/vault/edge/ole.html (aunque los ejemplos están en Visual Basic, son fáciles de entender)

Última edición por jmariano fecha: 29-08-2005 a las 14:29:00.
Responder Con Cita
  #7  
Antiguo 29-08-2005
Avatar de Elenita
Elenita Elenita is offline
Miembro
 
Registrado: jun 2005
Ubicación: Madrid
Posts: 56
Poder: 19
Elenita Va por buen camino
Hola jmariano,
La información que me has proporcionado me ha sido de mucha utilidad. Estaba empeñandome en crear un objeto y lo que neceito realmente es mostrar un documento WordPerfect en un contenedor OLE. Todavía estoy realizando pruebas, pero creo que va a ser menos complicado que crear un nuevo objeto OLE.
Estudiaré con detenimiento la página que me propones.
Muchísimas gracias por todo.
Un saludo.
Responder Con Cita
  #8  
Antiguo 16-09-2005
Avatar de Elenita
Elenita Elenita is offline
Miembro
 
Registrado: jun 2005
Ubicación: Madrid
Posts: 56
Poder: 19
Elenita Va por buen camino
Problema solucionado

Hola a todos, os cuento lo que necesitaba y la solución a la que he llegado, es posible que a alguien le pueda ayudar en algún momento.
Mi aplicación debía mostrar un documento WordPerfect en un contenedor OLE, para evitar que se pueda modificar, copiar o imprimir. Es cierto que a partir de la version 6 de WordPerfect se puede utilizar OLE en lugar de DDE, pero el control no es tan "sencillo" como en Word. Después de muchos quebraderos de cabeza y montones de pruebas me dieron la pista perfecta. Word es capaz de abrir archivos con extensión WPD (por lo tanto con formato de WordPerfect) así que la solución es tan sencilla como cambiarle la extensión al archivo de WordPerfect (cambiamos WPD por DOC) y mostrar ese archivo en el contenedor OLE.
Espero que sirva de ayuda...
Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:05:29.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi