/* WIN API */
PROCEDURE OpenPrinterA EXTERNAL "winspool.drv" :
DEFINE INPUT PARAMETER pPrinterName AS CHARACTER.
DEFINE OUTPUT PARAMETER phPrinter AS LONG.
DEFINE INPUT PARAMETER pDefault AS LONG.
DEFINE RETURN PARAMETER nullpointer AS LONG.
END PROCEDURE.
PROCEDURE ClosePrinter EXTERNAL "winspool.drv" :
DEFINE INPUT PARAMETER hPrinter AS LONG.
DEFINE RETURN PARAMETER nullpointer AS LONG.
END PROCEDURE.
PROCEDURE DocumentPropertiesA EXTERNAL "winspool.drv" :
DEFINE INPUT PARAMETER HWND AS LONG.
DEFINE INPUT PARAMETER hPrinter AS LONG.
DEFINE INPUT PARAMETER pDeviceName AS CHARACTER.
DEFINE INPUT PARAMETER pDevmodeOutput AS LONG.
DEFINE INPUT PARAMETER pDevmodeInput AS LONG.
DEFINE INPUT PARAMETER fMode AS LONG.
DEFINE RETURN PARAMETER ReturnValue AS LONG.
END PROCEDURE.
PROCEDURE GlobalLock EXTERNAL "kernel32.dll":
DEFINE INPUT PARAMETER hMem AS LONG. /* 64-bit AVM: INT64 */
DEFINE RETURN PARAMETER hAddr AS LONG. /* 64-bit AVM: INT64 */
END PROCEDURE.
PROCEDURE GlobalUnlock EXTERNAL "kernel32.dll":
DEFINE INPUT PARAMETER hMem AS LONG. /* 64-bit AVM: INT64 */
DEFINE RETURN PARAMETER bResult AS LONG.
END PROCEDURE.
&global DM_SPECVERSION &H320
/* Fields */
&global DM_ORIENTATION = &H1&
&global DM_PAPERSIZE = &H2&
&global DM_PAPERLENGTH = &H4&
&global DM_PAPERWIDTH = &H8&
&global DM_SCALE = &H10&
&global DM_COPIES = &H100&
&global DM_DEFAULTSOURCE = &H200&
&global DM_PRINTQUALITY = &H400&
&global DM_COLOR = &H800&
&global DM_DUPLEX = &H1000&
&global DM_YRESOLUTION = &H2000&
&global DM_TTOPTION = &H4000&
&global DM_COLLATE As Long = &H8000
&global DM_FORMNAME As Long = &H10000
/*orientation selections */
&global DMORIENT_PORTRAIT = 1
&global DMORIENT_LANDSCAPE = 2
/*paper selections */
&global DMPAPER_LETTER = 1
&global DMPAPER_FIRST = DMPAPER_LETTER ' Letter 8 1/2 x 11 in
&global DMPAPER_LETTERSMALL = 2 ' Letter Small 8 1/2 x 11 in
&global DMPAPER_TABLOID = 3 ' Tabloid 11 x 17 in
/*print qualities */
&global DMRES_DRAFT = (-1)
&global DMRES_LOW = (-2)
&global DMRES_MEDIUM = (-3)
&global DMRES_HIGH = (-4)
/*dmDisplayFlags flags */
&global DM_GRAYSCALE = &H1
&global DM_INTERLACED = &H2
&GLOB DM_OUT_BUFFER 2
&GLOB DM_IN_BUFFER 8
&GLOB CCHDEVICENAME 32
&GLOB DM_ORIENTATION 1
&GLOB DMORIENT_LANDSCAPE 2
&GLOB DMORIENT_PORTRAIT 1
&GLOB HP_TRAY_1 259
&GLOB HP_TRAY_2 260
&GLOB HP_TRAY_3 261
def var gvc_drucker as char no-undo.
def var gvc_label as char no-undo.
def var dmfields as int no-undo.
def var gvi_return as int no-undo.
def var hJob as int no-undo.
def var nRet as int no-undo.
def var gvi_kopien as int no-undo.
def var gvi_devmode as int64 no-undo.
def var gvi_maske as int no-undo.
def var nSize as int64 no-undo.
def var gvh_printer as int no-undo.
def var gvr_dev_mode as raw no-undo.
def var gmp_defaultdevmode as memptr no-undo.
def var gmp_devmode as memptr no-undo.
def var bResult as int no-undo.
DEFINE VARIABLE nCopiesOffset AS INTEGER NO-UNDO.
DEFINE VARIABLE hDevModeOffset AS INTEGER NO-UNDO.
DEFINE VARIABLE dmFieldsOffset AS INTEGER NO-UNDO.
DEFINE VARIABLE dmOrientationOffset AS INTEGER NO-UNDO.
DEFINE VARIABLE dmPaperSizeOffset AS INTEGER NO-UNDO.
DEFINE VARIABLE dmOrientation AS INTEGER NO-UNDO.
DEFINE VARIABLE dmPaperSize AS INTEGER NO-UNDO.
/* Values for 32-bit 10.2B06 or later */
nCopiesOffset = 33.
hDevModeOffset = 9.
dmFieldsOffset = 73.
dmOrientationOffset = 77.
dmPaperSizeOffset = 79.
/* Values for 32-bit before 10.2B06 */
assign
gvc_drucker = 'DEUSH-PRN006' /* 'DEUSH-Test-HP' 'PDFCreator':U */
gvc_label = 'C:\Program Files (x86)\combit\LL19\Programmierbare Beispiele und Deklarationen\Visual Basic\RTF Example\rtf.lbl':U.
run LlJobOpen(output hJob, {&CMBTLANG_GERMAN}).
run LlSetOptionString (output nRet, hJob, {&LL_OPTIONSTR_LICENSINGINFO}, "SW/YDg").
/* Prüfung auf Plausibilität der Daten unterbinden */
run LlSetOption (output nRet, hJob, {&LL_OPTION_XLATVARNAMES}, 0).
run LlSetOption (output nRet, hJob, {&LL_OPTION_NOPARAMETERCHECK}, 1).
run LlSetOption (output nRet, hJob, {&LL_OPTION_COMPRESSSTORAGE}, 0).
run LlSetOption (output nRet, hJob, {&LL_OPTION_NOPRINTERPATHCHECK}, 1).
run LlSetFileExtensions (output nRet, hJob, {&LL_PROJECT_LABEL}, 'lbl':U, 'lbp_':U + replace(replace(gvc_drucker, {&pa-backslash}, '_':U), ' ':U, '_':U), 'lbv':U).
/* zurücksetzen der Variablen */
/* es ist zu prüfen, ob dieser Code ebenfalls innerhalb der Verarbeitung */
/* durchgeführt werden muss, um Chaching zu vermeiden */
run LlDefineVariableStart(hJob).
run LlDefineFieldStart(hJob).
/* ***** List&Label VARIABLENDEKLARATION DUMMY START ***** */
RUN OpenPrinterA (gvc_drucker,OUTPUT gvh_printer,0, OUTPUT gvi_return).
if gvi_return = 0
then do:
message 'Fehler'.
return.
end.
/* Wie gross ist die DEV-Mode Struktur */
run DocumentPropertiesA (0, gvh_printer,
gvc_drucker,
0,
0,
0,
output gvi_return).
set-size(gmp_defaultdevmode) = gvi_return.
/* Holt die Default-Einstellungen DEVMODE */
run DocumentPropertiesA (0, gvh_printer,
gvc_drucker,
GET-POINTER-VALUE(gmp_defaultdevmode),
0,
{&DM_OUT_BUFFER},
output gvi_return).
copy-lob gmp_defaultdevmode to file ('c:\temp\test1.txt').
/* PUT-SHORT(gmp_defaultdevmode, 57) = 259. */
PUT-SHORT(gmp_defaultdevmode, 55) = 2.
copy-lob gmp_defaultdevmode to file ('c:\temp\test2.txt').
/* create a merged devmode: */
RUN DocumentPropertiesA (0, 0,
gvc_drucker,
GET-POINTER-VALUE(gmp_defaultdevmode),
GET-POINTER-VALUE(gmp_defaultdevmode),
{&DM_IN_BUFFER} + {&DM_OUT_BUFFER},
output gvi_return).
copy-lob gmp_defaultdevmode to file ('c:\temp\test3.txt').
/* gvi_devmode = GET-POINTER-VALUE(gmp_defaultdevmode). */
run DocumentPropertiesA (0, 0,
gvc_drucker,
GET-POINTER-VALUE(gmp_defaultdevmode),
0,
{&DM_OUT_BUFFER},
output gvi_return).
copy-lob gmp_defaultdevmode to file ('c:\temp\test4.txt').
run LlSetPrinterInPrinterFile (output nRet, hJob, {&LL_PROJECT_LABEL}, gvc_label, -1, gvc_drucker, GET-POINTER-VALUE(gmp_defaultdevmode) ).
/* Starten des Drucks */
run LlSetOption (output nRet, hJob, {&LL_OPTION_NOPRINTERPATHCHECK}, 1). /* XXX NOCHMALIGER AUFRUF */
run LlPrintStart (output nRet, hJob, {&LL_PROJECT_LABEL}, gvc_label, {&LL_PRINT_USERSELECT}, 0).