/* --------------------------------------------------------
* File: vpe.p -- Demo VPE/dll access in Progress ABL 4GL.
*---------------------------------------------------------*/
/* ****** Definitions ************************** */
/* Install VPE so the DLL is Registered */
&SCOP dll_file "vpep3240.dll"
/* {vpe.i} */
/* Only including what's used for demo */
&GLOB VPE_FIXED_MESSAGES 131072
&GLOB VUNIT_FACTOR_CM 100000
&GLOB VUNIT_FACTOR_INCH 254000
&GLOB VUNIT_FACTOR_MM10 1000
DEF VAR rReport AS CHARACTER NO-UNDO.
DEF VAR intError AS INTEGER INITIAL 0 NO-UNDO.
DEF VAR decLastPosXY AS DECIMAL NO-UNDO.
DEF VAR decUnit1 AS DECIMAL NO-UNDO.
DEF VAR decUnit2 AS DECIMAL NO-UNDO.
DEF VAR decX AS DECIMAL NO-UNDO.
DEF VAR decY AS DECIMAL NO-UNDO.
DEF VAR decX2 AS DECIMAL NO-UNDO.
DEF VAR decY2 AS DECIMAL NO-UNDO.
DEF VAR hRptHdl AS INTEGER NO-UNDO.
DEF VAR hDocHdl AS INT64 NO-UNDO INIT -1.
DEF VAR intFlag AS INTEGER NO-UNDO.
DEF VAR hWnd AS INTEGER NO-UNDO. /* OK to keep zero */
/* Constants sometimes need to be decimals, not literals */
DEFINE VAR VPE_FIXED_MESSAGES AS INTEGER INITIAL {&VPE_FIXED_MESSAGES} NO-UNDO.
DEFINE VAR VUNIT_FACTOR_MM10 AS DECIMAL INITIAL {&VUNIT_FACTOR_MM10} NO-UNDO.
DEFINE VAR VUNIT_FACTOR_INCH AS DECIMAL INITIAL {&VUNIT_FACTOR_INCH} NO-UNDO.
/* *************************** Main Block *************************** */
ASSIGN decX = 1
decY = 1
decx2 = 7
decY2 = 5
rReport = "c:\temp\vpeTestRpt.vpe".
MESSAGE "Prior to VpeOpenDocFile" SKIP
"VPE_FIXED_MESSAGES" {&VPE_FIXED_MESSAGES} VIEW-AS ALERT-BOX.
RUN VpeOpenDocFile (OUTPUT hDocHdl, 0, rReport, "Title", {&VPE_FIXED_MESSAGES}).
/*
MESSAGE "Prior to VpeOpenDoc"
SKIP "hWnd" hWnd
SKIP "VPE_FIXED_MESSAGES" {&VPE_FIXED_MESSAGES} VIEW-AS ALERT-BOX.
RUN VpeOpenDoc
(OUTPUT hDocHdl, hWnd, "Title", {&VPE_FIXED_MESSAGES}).
*/
IF hDocHdl = 0 THEN /* VpeOpenDoc returns a handle */
DO:
MESSAGE "Document Handle Returned zero."
SKIP "This is means the OpenDoc method"
SKIP "encountered an error. Returning."
VIEW-AS ALERT-BOX.
RETURN.
END.
/*
MESSAGE "Prior to VpeLicense"
SKIP "Output hDocHdl: " hDocHdl
VIEW-AS ALERT-BOX.
RUN VpeLicense (INPUT hDocHdl,
INPUT "VPE-P2400-xxxx",
INPUT "xxxx-xxxx").
*/
MESSAGE "Prior to VpeGetLastError"
SKIP "Output hDocHdl: " hDocHdl
VIEW-AS ALERT-BOX.
RUN VpeGetLastError (OUTPUT intError, hDocHdl).
MESSAGE "Prior to VpeGetUnitTransformation (1)"
SKIP "Returned from VpeGetLastError: " intError
SKIP "hDocHdl: " hDocHdl
SKIP "VUNIT_FACTOR_INCH" {&VUNIT_FACTOR_INCH}
SKIP "decUnit1" decUnit1
SKIP "decUnit2" decUnit2
VIEW-AS ALERT-BOX.
RUN VpeGetUnitTransformation (OUTPUT decUnit1, INPUT hDocHdl).
MESSAGE "Prior to VpeSetUnitTransformation"
SKIP "hDocHdl: " hDocHdl
SKIP "VUNIT_FACTOR_INCH" {&VUNIT_FACTOR_INCH}
SKIP "decUnit1" decUnit1
SKIP "decUnit2" decUnit2
VIEW-AS ALERT-BOX.
RUN VpeSetUnitTransformation (hDocHdl, VUNIT_FACTOR_INCH ).
MESSAGE "Prior to VpeGetUnitTransformation (2)"
SKIP "hDocHdl: " hDocHdl
SKIP "VUNIT_FACTOR_INCH" {&VUNIT_FACTOR_INCH}
SKIP "decUnit1" decUnit1
SKIP "decUnit2" decUnit2
VIEW-AS ALERT-BOX.
RUN VpeGetUnitTransformation (OUTPUT decUnit2, INPUT hDocHdl).
MESSAGE "Prior to VpeWrite"
SKIP "hDocHdl: " hDocHdl
SKIP "VUNIT_FACTOR_INCH" {&VUNIT_FACTOR_INCH}
SKIP "decUnit1" decUnit1
SKIP "decUnit2" decUnit2
VIEW-AS ALERT-BOX.
RUN VpeWrite (OUTPUT decLastPosXY, hDocHdl, decX, decY, decX2, decY2,
"Hello World").
MESSAGE "Prior to VpeWriteDoc" VIEW-AS ALERT-BOX.
RUN VpeWriteDoc (OUTPUT intError, hDocHdl, rReport).
/* VpeCloseDoc returns with an intError = 1.
** But the file was generated. */
MESSAGE "Prior to VpeCloseDoc" VIEW-AS ALERT-BOX.
RUN VpeCloseDoc (OUTPUT intError, hDocHdl).
MESSAGE "Procedure Completed"
SKIP "intError" intError
SKIP rReport SEARCH(rReport) VIEW-AS ALERT-BOX.
/* Important or Server go boom on go-live :) */
RELEASE EXTERNAL {&dll_file}.
RETURN. /* External API procedure definitions follow */
/* Don't bother with CDECL */
/*Define the VpeOpenDocFile() method*/
PROCEDURE VpeOpenDocFile EXTERNAL {&dll_file} PERSISTENT:
DEFINE RETURN PARAMETER hDocHdl AS LONG NO-UNDO.
DEFINE INPUT PARAMETER hWindow AS LONG NO-UNDO.
DEFINE INPUT PARAMETER pReport AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER chrTitle AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER LongFlags AS LONG NO-UNDO.
END PROCEDURE.
/*Define the VpeOpenDoc() method*/
PROCEDURE VpeOpenDoc EXTERNAL {&dll_file} PERSISTENT:
DEFINE RETURN PARAMETER hDocHdl AS LONG NO-UNDO.
DEFINE INPUT PARAMETER hWindow AS LONG NO-UNDO.
DEFINE INPUT PARAMETER chrTitle AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER LongFlags AS LONG NO-UNDO.
END PROCEDURE.
/*Define the VpeSetUnitTransformation() method*/
PROCEDURE VpeSetUnitTransformation EXTERNAL {&dll_file}:
DEFINE INPUT PARAMETER hReport AS LONG NO-UNDO.
DEFINE INPUT PARAMETER dblFactor AS DOUBLE NO-UNDO.
END PROCEDURE.
/*Define the VpeGetUnitTransformation() method*/
PROCEDURE VpeGetUnitTransformation EXTERNAL {&dll_file}:
DEFINE RETURN PARAMETER dblFactor AS DOUBLE NO-UNDO.
DEFINE INPUT PARAMETER hDoc AS LONG NO-UNDO.
END PROCEDURE.
/*Define the VpeWrite() method*/
PROCEDURE VpeWrite EXTERNAL {&dll_file}:
DEFINE RETURN PARAMETER intLastPOS AS DOUBLE NO-UNDO. /*dec*/
DEFINE INPUT PARAMETER hReport AS LONG NO-UNDO.
DEFINE INPUT PARAMETER intPOSX AS DOUBLE NO-UNDO. /*dec*/
DEFINE INPUT PARAMETER intPOSY AS DOUBLE NO-UNDO. /*dec*/
DEFINE INPUT PARAMETER intPOSX2 AS DOUBLE NO-UNDO. /*dec*/
DEFINE INPUT PARAMETER intPOSY2 AS DOUBLE NO-UNDO. /*dec*/
DEFINE INPUT PARAMETER chrTEXT AS CHARACTER NO-UNDO.
END PROCEDURE.
/*Define the VpeWriteDoc() method*/
PROCEDURE VpeWriteDoc EXTERNAL {&dll_file}:
DEFINE RETURN PARAMETER intError AS SHORT NO-UNDO.
DEFINE INPUT PARAMETER hReport AS LONG NO-UNDO.
DEFINE INPUT PARAMETER chrFile AS CHARACTER NO-UNDO.
END PROCEDURE.
/*Define the VpeCloseDoc() method*/
PROCEDURE VpeCloseDoc EXTERNAL {&dll_file}:
DEFINE RETURN PARAMETER intError AS SHORT NO-UNDO.
DEFINE INPUT PARAMETER hReport AS LONG NO-UNDO.
END PROCEDURE.
/*Define the VpeGetLastError() method*/
PROCEDURE VpeGetLastError EXTERNAL {&dll_file}:
DEFINE RETURN PARAMETER intError AS LONG NO-UNDO.
DEFINE INPUT PARAMETER hDoc AS LONG NO-UNDO.
END PROCEDURE.
/*Define the VpeLicense() method*/
PROCEDURE VpeLicense EXTERNAL {&dll_file}:
DEFINE INPUT PARAMETER hDoc AS LONG NO-UNDO.
DEFINE INPUT PARAMETER serial1 AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER serial2 AS CHARACTER NO-UNDO.
END PROCEDURE.