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.