Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Creación de objetos OLE de Word en VFP6 y VFP7
Message
From
05/06/2003 12:59:29
 
 
To
05/06/2003 07:18:59
General information
Forum:
Visual FoxPro
Category:
Classes - VCX
Miscellaneous
Thread ID:
00796564
Message ID:
00796820
Views:
218
Hola Jose Luis, parece que el problema viene entre las versiones de Word que se tienen instaladas, ya que al sólo decirle "Word" no comprende por cuál decidir a instanciar, recuerdo que se podia poner la versión específica de Word para que fuese menos ambiguo (por el momento no la recuerdo), Word.Document.97 o algo así. En esto no te puedo ayudar mucho ya que no cuento con Office (uso OpenOffice).
Por otro lado, me tome un poquito de tiempo en corregir algo de tu codigo ya que se me dificultó mucho entenderlo, espero no te molestes.
**---- GENERAR.PRG *** -----

LPARAMETERS m.orden,m.fichero,objeto,m.miclase

LOCAL m.nomprg,m.nomfxp

m.miclase2="oledoc"+ALLTRIM(STR(m.orden))
*aux=".foledoc"+ALLTRIM(STR(m.orden)) &&?? No entendí, me marcaría error
STORE SYS(3)+".prg" TO EVAL("objeto.foledoc"+trans(m.orden)),m,nomprog
&aux=SYS(3)+".prg"
m.nomprg=&aux

TEXT TO lccClase TEXTMERGE NOSHOW
  DEFINE CLASS <<m.miclase2>> AS OLEControl
     DocumentFile="<<m.fichero>>" && Este archivo debe existir.         	
     Top=0
     OleClass="<<m.miclase>>"
     OleTypeAllowed=0

     PROCEDURE Gotfocus
         this.parent.click()
     ENDPROC
     PROCEDURE DragOver
     LPARAMETERS oSource, nXCoord, nYCoord, nState
       this.parent.DragOver(oSource, nXCoord, nYCoord, nState)
     ENDPROC
     PROCEDURE Move
       IF this.top=1
         This.parent.mousemove(1)
       ENDIF
     ENDPROC  
  ENDDEFINE
ENDTEXT  

aux1=SUBSTR(m.nomprg,1,LEN(m.nomprg)-3)+"fxp"
IF FILE(m.nomprg)  
  RELEASE PROCEDURE (aux1)  
  DELETE FILE (m.nomprg)  
  DELETE FILE (aux1)
ENDIF

m.dev=STRTOFILE(lcClase,m.nomprg,.F.)
COMPILE (m.nomprg)
SET PROCEDURE TO (m.nomprg) ADDITIVE

WITH objeto  
  .addobject("oledoc",m.miclase2)
    WITH .OleDoc
     .Top = 1
     .Left = 1
     .Height = 105
     .Sizable = .F.
     .AutoActivate = 2
     .Enabled = .T.
     .Visible = F.
  ENDWITH
  .parent.NomProg = SYS(5)+SYS(2003)+"\"+m.nomprg
ENDWITH


* FIN GENERAR.PRG ---
>Me estoy encontrando con un problema al migrar una aplicación de "VFP6 Service Pack 5 Spanish" a "VFP7 Service Pack 1 Spanish" en un tema que creo no debería tener problemas.

>Para mostrar un documento Word en miniatura, genero por código una clase, le hago SET PROCEDURE TO MiNuevaClase.PRG e instancio esa misma clase.

>En VFP6 esto funcionaba sin problemas, y de hecho sigue funcionando. En VFP7 me solicita la ventana de dialogo para que le indique el objeto OLE del cual quiero crear la clase (el que se muestra al insertar en un formulario un objeto OLE vinculado), como si no comprendiera cual es la clase que solicito.

>El código que me permite hacer esto en VFP6 y que da problemas en 7 es >Generar.PRG. (AL FINAL DEL MENSAJE)
>La clase generada con este código para un archivo de Word dado es miclase.PRG. (AL FINAL DEL MENSAJE)
>Ambos archivos los adjunto.

>Además de esto, la versión con VFP6 fue generada desde un Windows 2000 Profesional que tenía instalado Office 2000, aunque sigue funcionando ahora que es un Windows XP Profesional y tiene instalado Office 2000, si bien ha tenido Word XP.
>
>También agradecería cualquier otra solución que pudieran dar para mostrar múltiples documentos Word (10) en una ventana de Visual FoxPro.

>Saludos.
>José Luis.
* GENERAR.PRG ---

PARAMETERS m.orden,m.fichero,objeto,m.miclase

LOCAL m.nomprg,m.nomfxp

m.miclase2="oledoc"+ALLTRIM(STR(m.orden))
aux=".foledoc"+ALLTRIM(STR(m.orden))		  
&aux=SYS(3)+".prg"
m.nomprg=&aux

aux="DEFINE CLASS "+m.miclase2+" AS OLEControl"+chr(13)+;
    "DocumentFile="+chr(34)+m.fichero+chr(34)+CHR(13)+; && Este archivo debe existir.         	
    "Top=0"+CHR(13)+;
    "OleClass="+chr(34)+m.miclase+chr(34)+CHR(13)+;
    "OleTypeAllowed=0"+CHR(13)+;
    CHR(13)+;
    "PROCEDURE Gotfocus"+CHR(13)+;
    "this.parent.click()"+CHR(13)+;  
    CHR(13)+; 
    "PROCEDURE DragOver"+CHR(13)+;
    "LPARAMETERS oSource, nXCoord, nYCoord, nState"+CHR(13)+;  
    "this.parent.DragOver(oSource, nXCoord, nYCoord, nState)"+CHR(13)+;
    CHR(13)+;
    "PROCEDURE Move"+CHR(13)+;
    "  IF this.top=1"+CHR(13)+;
    "    This.parent.mousemove(1)"+CHR(13)+;
    "  ENDIF"+CHR(13)+;        
	"ENDDEFINE"+CHR(13)+chr(13)

aux1=SUBSTR(m.nomprg,1,LEN(m.nomprg)-3)+"fxp"
IF FILE(m.nomprg)  
  RELEASE PROCEDURE (aux1)  
  DELETE FILE (m.nomprg)  
  DELETE FILE (aux1)
ENDIF

aux1=".foledoc"+ALLTRIM(STR(m.orden))		  
&aux1=SYS(3)+".prg"
m.nomprg=&aux1


m.dev=STRTOFILE(aux,m.nomprg,.F.)
COMPILE (m.nomprg)
SET PROCEDURE TO (m.nomprg) ADDITIVE

WITH objeto  
  .addobject("oledoc",m.miclase2)
  m.elcontrol=".oledoc"
  aux=m.elcontrol+".Top"
  &aux=1
  aux=m.elcontrol+".Left"
  &aux=1
  aux=m.elcontrol+".Height"
  &aux= 105  
  aux=m.elcontrol+".Width"
  &aux = 74
  aux=m.elcontrol+".Stretch"
  &aux= 1
  aux=m.elcontrol+".Sizable"
  &aux = .F.  
  aux=m.elcontrol+".AutoActivate"
  &aux = 2 
  aux=m.elcontrol+".Enabled"
  &aux = .T.
  .parent.nomprg = SYS(5)+SYS(2003)+"\"+m.nomprg
  aux=m.elcontrol+".Visible"
  &aux = .T.   
ENDWITH


* FIN GENERAR.PRG ---


* miclase.PRG ----

DEFINE CLASS oledoc2 AS OLEControl
DocumentFile="F:\BB\FWTN\JJAPP\ESCANER\IMAGENES\EXP.002\1\00000037.DOC"
Top=0
OleClass="WordDocument"
OleTypeAllowed=0

PROCEDURE Gotfocus
this.parent.click()

PROCEDURE DragOver
LPARAMETERS oSource, nXCoord, nYCoord, nState
this.parent.DragOver(oSource, nXCoord, nYCoord, nState)

PROCEDURE Move
  IF this.top=1
    This.parent.mousemove(1)
  ENDIF
ENDDEFINE


* FIN miclase.PRG --
Apoya a Visual FoxPro usandolo legalmente
--
¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º
Espartaco Palma Martínez
SysOp PortalFox
http://www.portalfox.com
esparta@portalfox.com
Previous
Reply
Map
View

Click here to load this message in the networking platform