Rapinto
12 de marzo de 2015, 00:54
Exemplo de como chamar o SpellCheck do Word para verificar texto numa CMtext1 de Cobol.
É necessário ter o MS Office instalado com correção actuvada.
@OPTIONS NOALPHA
IDENTIFICATION DIVISION.
PROGRAM-ID. CHECKSPELLING.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
CLASS OLE AS "*OLE"
CLASS OLE-EX AS "*OLE-EXCEPTION".
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WORD OBJECT REFERENCE OLE.
01 DOCUMENT OBJECT REFERENCE OLE.
01 ACTIVEDOCUMENT OBJECT REFERENCE OLE.
01 LINHA OBJECT REFERENCE OLE.
01 SELECTION OBJECT REFERENCE OLE.
01 APPLICATION PIC X(20) VALUE "Word.Application".
01 OLE-TRUE PIC 1(1) BIT VALUE B"1".
01 FILLER PIC 1(7) BIT.
01 OLE-FALSE PIC 1(1) BIT VALUE B"0".
01 FILLER PIC 1(7) BIT.
01 CRLF PIC X(002) VALUE X"0D0A".
01 VAL PIC X(256).
01 S-INDEX PIC S9(4) COMP-5 VALUE 0.
01 HWND BINARY-LONG.
01 WINDOWNAME PIC X(128) VALUE SPACE.
01 WINDOWCLASSE BINARY-LONG VALUE ZERO.
LINKAGE SECTION.
01 TEXTO PIC X(256).
01 CARACTERES PIC 9(008).
PROCEDURE DIVISION USING TEXTO CARACTERES.
MAIN SECTION.
MAIN-00.
MOVE 1 TO CARACTERES.
IF TEXTO = SPACE GO TO MAIN-99.
INVOKE OLE "CREATE-OBJECT" USING APPLICATION RETURNING WORD.
INVOKE WORD "SET-VISIBLE" USING OLE-FALSE.
INVOKE WORD "GET-DOCUMENTS" RETURNING DOCUMENT.
INVOKE DOCUMENT "ADD" RETURNING ACTIVEDOCUMENT.
INVOKE WORD "GET-SELECTION" RETURNING LINHA.
*
MOVE TEXTO TO VAL.
INVOKE LINHA "TYPETEXT" USING VAL.
*
INVOKE LINHA "WholeStory" RETURNING SELECTION.
INVOKE WORD "SET-VISIBLE" USING OLE-TRUE.
* INVOKE LINHA "WholeStory" RETURNING SELECTION.
* INVOKE LINHA "COPY" RETURNING VAL.
* MOVE "Ortografia: Português (Portugal)" TO WINDOWNAME.
MOVE "Documento1 - Word" TO WINDOWNAME.
MOVE X"00" TO WINDOWNAME(18:1).
*
CALL "FindWindowA" WITH STDCALL USING
BY VALUE WINDOWCLASSE
BY REFERENCE WINDOWNAME
RETURNING HWND.
IF HWND > 0 THEN
CALL "SetForegroundWindow" WITH STDCALL USING
BY VALUE HWND.
*
INVOKE ACTIVEDOCUMENT "CheckSpelling" RETURNING VAL.
*
INVOKE LINHA "GET-TEXT" RETURNING VAL.
INSPECT VAL REPLACING ALL X"0D" BY SPACE.
INSPECT VAL REPLACING ALL X"0A" BY SPACE.
MOVE 256 TO CARACTERES.
MAIN-50.
IF VAL(CARACTERES:1) = SPACE GO TO MAIN-60.
GO TO MAIN-80.
MAIN-60.
IF CARACTERES NOT = 1 SUBTRACT 1 FROM CARACTERES GO TO MAIN-50.
MAIN-80.
ADD 1 TO CARACTERES.
MOVE VAL TO TEXTO.
INVOKE ACTIVEDOCUMENT "CLOSE" USING S-INDEX.
INVOKE WORD "QUIT".
SET LINHA TO NULL.
SET DOCUMENT TO NULL.
SET ACTIVEDOCUMENT TO NULL.
SET WORD TO NULL.
MAIN-99.
END PROGRAM CHECKSPELLING.
PS: Deve ser alterado o nome da form do Word para o caso particular (Documento1 - Word).
Se não abre mas fica por tras da nossa form.
Espero que seja útil a alguém.
Saludos Rui Pinto
É necessário ter o MS Office instalado com correção actuvada.
@OPTIONS NOALPHA
IDENTIFICATION DIVISION.
PROGRAM-ID. CHECKSPELLING.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
CLASS OLE AS "*OLE"
CLASS OLE-EX AS "*OLE-EXCEPTION".
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WORD OBJECT REFERENCE OLE.
01 DOCUMENT OBJECT REFERENCE OLE.
01 ACTIVEDOCUMENT OBJECT REFERENCE OLE.
01 LINHA OBJECT REFERENCE OLE.
01 SELECTION OBJECT REFERENCE OLE.
01 APPLICATION PIC X(20) VALUE "Word.Application".
01 OLE-TRUE PIC 1(1) BIT VALUE B"1".
01 FILLER PIC 1(7) BIT.
01 OLE-FALSE PIC 1(1) BIT VALUE B"0".
01 FILLER PIC 1(7) BIT.
01 CRLF PIC X(002) VALUE X"0D0A".
01 VAL PIC X(256).
01 S-INDEX PIC S9(4) COMP-5 VALUE 0.
01 HWND BINARY-LONG.
01 WINDOWNAME PIC X(128) VALUE SPACE.
01 WINDOWCLASSE BINARY-LONG VALUE ZERO.
LINKAGE SECTION.
01 TEXTO PIC X(256).
01 CARACTERES PIC 9(008).
PROCEDURE DIVISION USING TEXTO CARACTERES.
MAIN SECTION.
MAIN-00.
MOVE 1 TO CARACTERES.
IF TEXTO = SPACE GO TO MAIN-99.
INVOKE OLE "CREATE-OBJECT" USING APPLICATION RETURNING WORD.
INVOKE WORD "SET-VISIBLE" USING OLE-FALSE.
INVOKE WORD "GET-DOCUMENTS" RETURNING DOCUMENT.
INVOKE DOCUMENT "ADD" RETURNING ACTIVEDOCUMENT.
INVOKE WORD "GET-SELECTION" RETURNING LINHA.
*
MOVE TEXTO TO VAL.
INVOKE LINHA "TYPETEXT" USING VAL.
*
INVOKE LINHA "WholeStory" RETURNING SELECTION.
INVOKE WORD "SET-VISIBLE" USING OLE-TRUE.
* INVOKE LINHA "WholeStory" RETURNING SELECTION.
* INVOKE LINHA "COPY" RETURNING VAL.
* MOVE "Ortografia: Português (Portugal)" TO WINDOWNAME.
MOVE "Documento1 - Word" TO WINDOWNAME.
MOVE X"00" TO WINDOWNAME(18:1).
*
CALL "FindWindowA" WITH STDCALL USING
BY VALUE WINDOWCLASSE
BY REFERENCE WINDOWNAME
RETURNING HWND.
IF HWND > 0 THEN
CALL "SetForegroundWindow" WITH STDCALL USING
BY VALUE HWND.
*
INVOKE ACTIVEDOCUMENT "CheckSpelling" RETURNING VAL.
*
INVOKE LINHA "GET-TEXT" RETURNING VAL.
INSPECT VAL REPLACING ALL X"0D" BY SPACE.
INSPECT VAL REPLACING ALL X"0A" BY SPACE.
MOVE 256 TO CARACTERES.
MAIN-50.
IF VAL(CARACTERES:1) = SPACE GO TO MAIN-60.
GO TO MAIN-80.
MAIN-60.
IF CARACTERES NOT = 1 SUBTRACT 1 FROM CARACTERES GO TO MAIN-50.
MAIN-80.
ADD 1 TO CARACTERES.
MOVE VAL TO TEXTO.
INVOKE ACTIVEDOCUMENT "CLOSE" USING S-INDEX.
INVOKE WORD "QUIT".
SET LINHA TO NULL.
SET DOCUMENT TO NULL.
SET ACTIVEDOCUMENT TO NULL.
SET WORD TO NULL.
MAIN-99.
END PROGRAM CHECKSPELLING.
PS: Deve ser alterado o nome da form do Word para o caso particular (Documento1 - Word).
Se não abre mas fica por tras da nossa form.
Espero que seja útil a alguém.
Saludos Rui Pinto