Este código de Trevor Hancock está en el Artículo Q271819 de la Base de Conocimientos de Microsoft.
Para probarlo, solo hay que pegar el código en un nuevo .PRG y ejecutarlo desde VFP.
************ START CODE ***********
PUBLIC oform1
oform1=CREATEOBJECT("form1")
oform1.SHOW
RETURN
**************************************
*
DEFINE CLASS form1 AS FORM
HEIGHT = 250
WIDTH = 375
SHOWWINDOW = 2
AUTOCENTER = .T.
BORDERSTYLE = 2
CAPTION = "VFP - Word Spell Checking"
MAXBUTTON = .F.
NAME = "Form1"
ADD OBJECT edttexttocheck AS EDITBOX WITH ;
HEIGHT = 163, ;
LEFT = 23, ;
TOP = 21, ;
WIDTH = 332, ;
NAME = "edtTextToCheck"
ADD OBJECT cmdcheckspelling AS COMMANDBUTTON WITH ;
TOP = 207, ;
LEFT = 115, ;
HEIGHT = 27, ;
WIDTH = 149, ;
CAPTION = "Check Spelling", ;
NAME = "cmdCheckSpelling"
PROCEDURE findword
*~~~~~~~~~~~~~~~~~~~~~
* PROCEDURE FindWord
*
* AUTHOR: Trevor Hancock, , Microsoft Corporation
* CREATED : 08/22/00 11:50:32 AM
*
* ABSTRACT: Locates an installation of MS Word using the FindExecutable API
* Creates a file with a .doc extension, checks the association on that
* file using FindExecutable, then deletes the file. FindExecutable returns
* the full, null terminated path to the application associated with
* .doc files (in this case).
* ACCEPTS: Nothing
* RETURNS: Full path to the application associated with .doc files on this machine.
*~~~~~~~~~~~~~~~~~~~~~
LOCAL lcPath, lcResult, lcFileName, llRetVal, ;
lcCurDir, lnFileHand, lcWordPath
lcPath = SPACE(0)
lcResult = SPACE(128)
llRetVal = .F.
*!* Determine the DIR this form is running from. JUSTPATH() and ADDBS()
*!* could be used here instead (if using VFP6), but this code will work
*!* in any VFP version.
lcCurDir = SUBSTR(SYS(16,0),ATC([ ],SYS(16,0),2)+1)
lcCurDir = SUBSTR(lcCurDir,1,RAT([],lcCurDir))
lcFileName = lcCurDir + SYS(3) + [.doc]
*!* Create a file with a .doc extension.
*!* Could use STRTOFILE() here in VFP6.
lnFileHand = FCREATE(lcFileName,0)
= FCLOSE(lnFileHand)
DECLARE INTEGER FindExecutable IN shell32 STRING @lcFilename, ;
STRING @lcPath , STRING @lcResult
*!* Determine the file association on .DOC files
IF FindExecutable(@lcFileName, @lcPath, @lcResult) > 32
*!* Strip off trailing chr(0)
lcWordPath = UPPER(SUBSTR(lcResult,1,LEN(ALLTR(lcResult))-1))
IF [WINWORD] $ lcWordPath
llRetVal = .T.
ENDIF
ENDIF
*!* Clean up after ourselves
ERASE (lcFileName)
RETURN llRetVal
ENDPROC
PROCEDURE DESTROY
IF TYPE([goWord]) = [O]
IF TYPE([goWordDoc]) = [O]
goWordDoc.SAVED = .T.
goWordDoc.CLOSE
ENDIF
goWord.QUIT
ENDIF
RELEASE goWord, goWordDoc
ENDPROC
PROCEDURE INIT
*--- English
* THIS.edtTextToCheck.VALUE = "Thhis text has mistakees in it. We will seend " + ;
* "it to Word and have it cheked."
*-- Español
THIS.edtTextToCheck.VALUE = "Ezte tecto esta escrito kon herrores ppara " + ;
"que Word lo chequee."
ENDPROC
PROCEDURE cmdcheckspelling.CLICK
*~~~~~~~~~~~~~~~~~~~~~
* PROCEDURE cmdcheckspelling.CheckSpelling
*
* AUTHOR: Trevor Hancock, Microsoft Corporation
* CREATED : 08/22/00 12:03:46 PM
*
* ABSTRACT: Automates MS Word to check the spelling of text in
* THISFORM.edtTextToCheck
* ACCEPTS: Nothing
* RETURNS: Nothing
*~~~~~~~~~~~~~~~~~~~~~
IF TYPE([goWord]) # [O] && Check if you have already instantiated Word
IF !THISFORM.FindWord() && You don't have Word up, so let's locate it.
MESSAGEBOX([Microsoft Word is either not installed or is incorrectly registered.], + ;
0,[Word Start-Up Failed])
RETURN .F.
ENDIF
*!* Change the mouse pointer for all form controls to indicate processing (opening Word)
WITH THISFORM
.cmdCheckSpelling.MOUSEPOINTER = 11
.edtTextToCheck.MOUSEPOINTER = 11
.MOUSEPOINTER = 11
ENDWITH
PUBLIC goWord, goWordDoc && Public vars for Word and Document1 in Word.
goWord = CREATEOBJECT([WORD.APPLICATION]) && Create Word
WITH goWord
.WINDOWSTATE= 0 && wdWindowStateNormal (needs to be Normal before you can move it)
.MOVE(1000,1000) && Move the window out of view
goWordDoc = .Documents.ADD
ENDWITH
*!* Change mouse pointers back
WITH THISFORM
.cmdCheckSpelling.MOUSEPOINTER = 0
.edtTextToCheck.MOUSEPOINTER = 0
.MOUSEPOINTER = 0
ENDWITH
ENDIF
WITH goWordDoc
.Content.TEXT = ALLTRIM(THISFORM.edtTextToCheck.VALUE)
.ACTIVATE
IF .SpellingErrors.COUNT > 0
.CHECKSPELLING
ELSE
=MESSAGEBOX([Spell check complete. No errors found],0,[Spell Check])
ENDIF
*!* For some reason, Word likes to make itself visible here. Keep it hidden...
goWord.VISIBLE = .F.
THISFORM.edtTextToCheck.VALUE = .Content.TEXT
ENDWITH
ENDPROC
ENDDEFINE
*
**********************************
*!*********** END CODE ***********
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.