Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Automatizar Word Perfect mediante OLE (https://www.clubdelphi.com/foros/showthread.php?t=24585)

Elenita 26-08-2005 13:19:16

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...

jmariano 26-08-2005 13:47:56

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!

Elenita 26-08-2005 14:37:43

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.

jmariano 26-08-2005 15:25:05

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!

Elenita 29-08-2005 12:00:33

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.

jmariano 29-08-2005 14:26:46

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)

Elenita 29-08-2005 15:14:27

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.

Elenita 16-09-2005 13:58:09

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.


La franja horaria es GMT +2. Ahora son las 18:19:30.

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