uo_rpt_printer_setting.sru 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192
  1. $PBExportHeader$uo_rpt_printer_setting.sru
  2. forward
  3. global type uo_rpt_printer_setting from nonvisualobject
  4. end type
  5. type str_printer_info_1 from structure within uo_rpt_printer_setting
  6. end type
  7. type str_printer_info_2 from structure within uo_rpt_printer_setting
  8. end type
  9. type str_devmode from structure within uo_rpt_printer_setting
  10. end type
  11. type str_printer_defaults from structure within uo_rpt_printer_setting
  12. end type
  13. type str_printdlg from structure within uo_rpt_printer_setting
  14. end type
  15. type str_devnames from structure within uo_rpt_printer_setting
  16. end type
  17. type str_point from structure within uo_rpt_printer_setting
  18. end type
  19. type str_rect from structure within uo_rpt_printer_setting
  20. end type
  21. type str_pagesetupdlg from structure within uo_rpt_printer_setting
  22. end type
  23. end forward
  24. type str_printer_info_1 from structure
  25. long flags
  26. long Description
  27. long name
  28. long comment
  29. end type
  30. type str_printer_info_2 from structure
  31. long servername
  32. long printername
  33. long sharename
  34. long portname
  35. long drivername
  36. long comment
  37. long location
  38. long devmode
  39. long sepfile
  40. long printprocessor
  41. long datatype
  42. long parameters
  43. long securitydescriptor
  44. long attributes
  45. long priority
  46. long defaultpriority
  47. long starttime
  48. long untiltime
  49. long status
  50. long cjobs
  51. long averageppm
  52. character reserve[500]
  53. end type
  54. type str_devmode from structure
  55. character dmdevicename[32]
  56. unsignedinteger dmspecversion
  57. unsignedinteger dmdriverversion
  58. unsignedinteger dmsize
  59. unsignedinteger dmdriverextra
  60. unsignedlong dmfields
  61. unsignedinteger dmorientation
  62. unsignedinteger dmpapersize
  63. unsignedinteger dmpaperlength
  64. unsignedinteger dmpaperwidth
  65. integer dmscale
  66. integer dmcopies
  67. integer dmdefaultsource
  68. integer dmprintquality
  69. integer dmcolor
  70. integer dmduplex
  71. integer dmyresolution
  72. integer dmttoption
  73. integer dmcollate
  74. character dmformname[32]
  75. unsignedinteger dmlogpixels
  76. unsignedlong dmbitsperpel
  77. unsignedlong dmpelswidth
  78. unsignedlong dmpelsheight
  79. unsignedlong dmdisplayflags
  80. unsignedlong dmdisplayfrequency
  81. unsignedlong dmicmmethod
  82. unsignedlong dmicmintent
  83. unsignedlong dmmediatype
  84. unsignedlong dmdithertype
  85. unsignedlong dmreserved1
  86. unsignedlong dmreserved2
  87. unsignedlong dmreserved3
  88. end type
  89. type str_printer_defaults from structure
  90. long Datatype
  91. long DevMode
  92. long DesiredAccess
  93. end type
  94. type str_printdlg from structure
  95. unsignedlong lstructsize
  96. unsignedlong hwndowner
  97. unsignedlong hdevmode
  98. unsignedlong hdevnames
  99. unsignedlong hdc
  100. unsignedlong flags
  101. unsignedinteger nfrompage
  102. unsignedinteger ntopage
  103. unsignedinteger nminpage
  104. unsignedinteger nmaxpage
  105. unsignedinteger ncopies
  106. unsignedlong hinstance
  107. unsignedlong lcustdata
  108. unsignedlong lpfnprinthook
  109. unsignedlong lpfnsetuphook
  110. unsignedlong lpprinttemplatename
  111. unsignedlong lpsetuptemplatename
  112. unsignedlong hprinttemplate
  113. unsignedlong hsetuptemplate
  114. uint reserve1
  115. end type
  116. type str_devnames from structure
  117. UINT wDriverOffset
  118. UINT wDeviceOffset
  119. UINT wOutputOffset
  120. UINT wDefault
  121. character drivername[32]
  122. character devicename[32]
  123. character portname[32]
  124. end type
  125. type str_point from structure
  126. long x
  127. long y
  128. end type
  129. type str_rect from structure
  130. long left
  131. long top
  132. long right
  133. long bottom
  134. end type
  135. type str_PAGESETUPDLG from structure
  136. ulong lStructSize
  137. ulong hwndOwner
  138. ulong hDevMode
  139. ulong hDevNames
  140. ulong Flags
  141. str_point ptPaperSize
  142. str_rect rtMinMargin
  143. str_rect rtMargin
  144. ulong hInstance
  145. ulong lCustData
  146. ulong lpfnPageSetupHook
  147. ulong lpfnPagePaintHook
  148. ulong lpPageSetupTemplateName
  149. ulong hPageSetupTemplate
  150. end type
  151. global type uo_rpt_printer_setting from nonvisualobject autoinstantiate
  152. end type
  153. type prototypes
  154. function boolean EnumPrinters(ulong flags, string name, ulong level, ref blob buffer, ulong cbbuf, ref ulong cbneeded, ref ulong returned) library "winspool.drv" alias for "EnumPrintersA;Ansi"
  155. function ulong CopyMem ( ref str_printer_info_1 dest, ref blob source, ulong length ) library "kernel32" alias for "RtlMoveMemory;Ansi"
  156. function ulong CopyMem ( ref str_printer_info_2 dest, ref blob source, ulong length ) library "kernel32" alias for "RtlMoveMemory;Ansi"
  157. function ulong CopyMem ( ref blob source, ref str_printer_info_2 dest, ulong length ) library "kernel32" alias for "RtlMoveMemory;Ansi"
  158. function boolean OpenPrinter ( string PrinterName, ref ulong hPrinter, ulong null) library "winspool.drv" alias for "OpenPrinterA;Ansi"
  159. function boolean OpenPrinter ( string PrinterName, ref ulong hPrinter, ref str_printer_defaults null) library "winspool.drv" alias for "OpenPrinterA;Ansi"
  160. function boolean ClosePrinter ( ulong hPrinter ) library "winspool.drv"
  161. function boolean GetPrinter ( ulong hPrinter, ulong level, ref blob Printer, ulong cbbuf, ref ulong cbNeeded ) library "winspool.drv" alias for "GetPrinterA"
  162. function boolean SetPrinter ( ulong hPrinter, ulong level, ref blob Printer, ulong command ) library "winspool.drv" alias for "SetPrinterA"
  163. function boolean PrinterProperties ( ulong hwnd, ulong hprinter ) library "winspool.drv"
  164. function ulong CopyMem ( ref str_devmode dest, ref blob src, ulong length ) library "kernel32" alias for "RtlMoveMemory;Ansi"
  165. function ulong CopyMem ( ref str_devmode dest, ulong src, ulong length ) library "kernel32" alias for "RtlMoveMemory;Ansi"
  166. function ulong CopyMem ( ref blob src, ref str_devmode dest, ulong length ) library "kernel32" alias for "RtlMoveMemory;Ansi"
  167. function ulong CopyMem ( ulong src, ref str_devmode dest, ulong length ) library "kernel32" alias for "RtlMoveMemory;Ansi"
  168. function long DocumentProperties ( ulong hwnd, ulong hprinter, string null, ref blob DevModeOutput, long null_1, ulong fMode ) library "winspool.drv" alias for "DocumentPropertiesA;Ansi"
  169. function long DocumentProperties ( ulong hwnd, ulong hprinter, string null, ulong null_1, ref str_devmode pDevModeInput , ulong fMode ) library "winspool.drv" alias for "DocumentPropertiesA;Ansi"
  170. function long DocumentProperties ( ulong hwnd, ulong hprinter, string null, ulong null_1, ref blob pDevModeInput , ulong fMode ) library "winspool.drv" alias for "DocumentPropertiesA;Ansi"
  171. function long DeviceCapabilities ( string Device, string Port, uint fwCapability, ref blob pOutput, long devmode ) library "winspool.drv" alias for "DeviceCapabilitiesA;Ansi"
  172. function long DeviceCapabilities ( string Device, string Port, uint fwCapability, long null, long devmode ) library "winspool.drv" alias for "DeviceCapabilitiesA;Ansi"
  173. function ulong CreateDC ( long driver, string device, long output, long devmode ) library "gdi32" alias for "CreateDCA;Ansi"
  174. function boolean DeleteDC ( ulong hdc ) library "gdi32"
  175. function int Escape ( ulong hdc, int nEscape, int cbInput, long inData, ref blob outdata ) library "gdi32"
  176. function ulong GlobalAlloc(uint uFlags, ulong dwBytes ) library "kernel32"
  177. function ulong GlobalFree ( ulong hmem ) library "kernel32"
  178. function ulong GlobalLock ( ulong hmem ) library "kernel32"
  179. function boolean GlobalUnlock (ulong hmem ) library "kernel32"
  180. function ulong GlobalSize ( ulong hem ) library "kernel32"
  181. function long PrintDlg(ref str_printdlg printdlg) library "comdlg32" alias for "PrintDlgA;Ansi"
  182. function ulong CopyMem ( ref str_devnames dest, ulong src, ulong length ) library "kernel32" alias for "RtlMoveMemory;Ansi"
  183. function ulong CopyMem ( ref blob dest, ulong src, ulong length ) library "kernel32" alias for "RtlMoveMemory"
  184. function boolean PageSetupDlg(ref str_pagesetupdlg ll ) library "comdlg32" alias for "PageSetupDlgA;Ansi"
  185. end prototypes
  186. type variables
  187. constant ulong PRINTER_ENUM_DEFAULT = 1
  188. constant ulong PRINTER_ENUM_LOCAL = 2
  189. constant ulong PRINTER_ENUM_CONNECTIONS = 4
  190. constant ulong PRINTER_ENUM_FAVORITE = 4
  191. constant ulong PRINTER_ENUM_NAME = 8
  192. constant ulong PRINTER_ENUM_REMOTE = 16
  193. constant ulong PRINTER_ENUM_SHARED = 32
  194. constant ulong PRINTER_ENUM_NETWORK = 64
  195. constant ulong PRINTER_ENUM_EXPAND = 16384
  196. constant ulong PRINTER_ENUM_CONTAINER = 32768
  197. constant ulong PRINTER_ENUM_ICONMASK = 16711680
  198. constant ulong PRINTER_ENUM_ICON1 = 65536
  199. constant ulong PRINTER_ENUM_ICON2 = 131072
  200. constant ulong PRINTER_ENUM_ICON3 = 262144
  201. constant ulong PRINTER_ENUM_ICON4 = 545288
  202. constant ulong PRINTER_ENUM_ICON5 = 1048576
  203. constant ulong PRINTER_ENUM_ICON6 = 2097152
  204. constant ulong PRINTER_ENUM_ICON7 = 4194304
  205. constant ulong PRINTER_ENUM_ICON8 = 8388608
  206. constant integer PRINTER_INFO_1_LEN = 16
  207. constant integer PRINTER_INFO_2_LEN = 84
  208. constant integer DEVMODE_LEN = 148
  209. constant ulong DM_ORIENTATION = 00000001
  210. constant ulong DM_PAPERSIZE = 00000002
  211. constant ulong DM_PAPERLENGTH = 00000004
  212. constant ulong DM_PAPERWIDTH = 00000008
  213. constant ulong DM_SCALE = 00000016
  214. constant ulong DM_COPIES = 00000256
  215. constant ulong DM_DEFAULTSOURCE = 00000512
  216. constant ulong DM_PRINTQUALITY = 000001024
  217. constant ulong DM_COLOR = 000002048
  218. constant ulong DM_DUPLEX = 00004096
  219. constant ulong DM_YRESOLUTION = 00008192
  220. constant ulong DM_TTOPTION = 000016384
  221. constant ulong DM_COLLATE = 32768
  222. constant ulong DM_FORMNAME = 65536
  223. constant ulong DM_LOGPIXELS = 131072
  224. constant ulong DM_BITSPERPEL = 262144
  225. constant ulong DM_PELSWIDTH = 524288
  226. constant ulong DM_PELSHEIGHT = 1048576
  227. constant ulong DM_DISPLAYFLAGS = 2097152
  228. constant ulong DM_DISPLAYFREQUENCY = 4194304
  229. constant ulong DM_ICMMETHOD = 8388608
  230. constant ulong DM_ICMINTENT = 16777216
  231. constant ulong DM_MEDIATYPE = 33554432
  232. constant ulong DM_DITHERTYPE = 67108864
  233. constant ulong DM_PANNINGWIDTH = 134217728
  234. constant ulong DM_PANNINGHEIGHT = 268435456
  235. /* orientation selections */
  236. constant ulong DMORIENT_PORTRAIT = 1
  237. constant ulong DMORIENT_LANDSCAPE = 2
  238. constant ulong PRINTER_ATTRIBUTE_QUEUED = 0001
  239. constant ulong PRINTER_ATTRIBUTE_DIRECT = 0002
  240. constant ulong PRINTER_ATTRIBUTE_DEFAULT = 0004
  241. constant ulong PRINTER_ATTRIBUTE_SHARED = 0008
  242. constant ulong PRINTER_ATTRIBUTE_NETWORK = 0016
  243. constant ulong PRINTER_ATTRIBUTE_HIDDEN = 0032
  244. constant ulong PRINTER_ATTRIBUTE_LOCAL = 0064
  245. constant ulong PRINTER_ATTRIBUTE_ENABLE_DEVQ = 128
  246. constant ulong PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS = 256
  247. constant ulong PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST = 512
  248. constant ulong PRINTER_ATTRIBUTE_WORK_OFFLINE = 1024
  249. constant ulong PRINTER_ATTRIBUTE_ENABLE_BIDI = 2048
  250. constant ulong PRINTER_ATTRIBUTE_RAW_ONLY = 4096
  251. constant ulong DM_IN_BUFFER = 8
  252. constant ulong DM_IN_PROMPT = 4
  253. constant ulong DM_OUT_BUFFER = 2
  254. constant ulong DM_OUT_DEFAULT = 1
  255. constant ulong DC_FIELDS = 1
  256. constant ulong DC_PAPERS = 2
  257. constant ulong DC_PAPERSIZE = 3
  258. constant ulong DC_MINEXTENT = 4
  259. constant ulong DC_MAXEXTENT = 5
  260. constant ulong DC_BINS = 6
  261. constant ulong DC_DUPLEX = 7
  262. constant ulong DC_SIZE = 8
  263. constant ulong DC_EXTRA = 9
  264. constant ulong DC_VERSION = 10
  265. constant ulong DC_DRIVER = 11
  266. constant ulong DC_BINNAMES = 12
  267. constant ulong DC_ENUMRESOLUTIONS = 13
  268. constant ulong DC_FILEDEPENDENCIES= 14
  269. constant ulong DC_TRUETYPE = 15
  270. constant ulong DC_PAPERNAMES = 16
  271. constant ulong DC_ORIENTATION = 17
  272. constant ulong DC_COPIES = 18
  273. constant uint DMPAPER_LETTER = 1 /* Letter 8 1/2 x 11 in */
  274. constant uint DMPAPER_LETTERSMALL = 2 /* Letter Small 8 1/2 x 11 in */
  275. constant uint DMPAPER_TABLOID = 3 /* Tabloid 11 x 17 in */
  276. constant uint DMPAPER_LEDGER = 4 /* Ledger 17 x 11 in */
  277. constant uint DMPAPER_LEGAL = 5 /* Legal 8 1/2 x 14 in */
  278. constant uint DMPAPER_STATEMENT = 6 /* Statement 5 1/2 x 8 1/2 in */
  279. constant uint DMPAPER_EXECUTIVE = 7 /* Executive 7 1/4 x 10 1/2 in */
  280. constant uint DMPAPER_A3 = 8 /* A3 297 x 420 mm */
  281. constant uint DMPAPER_A4 = 9 /* A4 210 x 297 mm */
  282. constant uint DMPAPER_A4SMALL = 10 /* A4 Small 210 x 297 mm */
  283. constant uint DMPAPER_A5 = 11 /* A5 148 x 210 mm */
  284. constant uint DMPAPER_B4 = 12 /* B4 (JIS) 250 x 354 */
  285. constant uint DMPAPER_B5 = 13 /* B5 (JIS) 182 x 257 mm */
  286. constant uint DMPAPER_FOLIO = 14 /* Folio 8 1/2 x 13 in */
  287. constant uint DMPAPER_QUARTO = 15 /* Quarto 215 x 275 mm */
  288. constant uint DMPAPER_10X14 = 16 /* 10x14 in */
  289. constant uint DMPAPER_11X17 = 17 /* 11x17 in */
  290. constant uint DMPAPER_NOTE = 18 /* Note 8 1/2 x 11 in */
  291. constant uint DMPAPER_ENV_9 = 19 /* Envelope #9 3 7/8 x 8 7/8 */
  292. constant uint DMPAPER_ENV_10 = 20 /* Envelope #10 4 1/8 x 9 1/2 */
  293. constant uint DMPAPER_ENV_11 = 21 /* Envelope #11 4 1/2 x 10 3/8 */
  294. constant uint DMPAPER_ENV_12 = 22 /* Envelope #12 4 \276 x 11 */
  295. constant uint DMPAPER_ENV_14 = 23 /* Envelope #14 5 x 11 1/2 */
  296. constant uint DMPAPER_CSHEET = 24 /* C size sheet */
  297. constant uint DMPAPER_DSHEET = 25 /* D size sheet */
  298. constant uint DMPAPER_ESHEET = 26 /* E size sheet */
  299. constant uint DMPAPER_ENV_DL = 27 /* Envelope DL 110 x 220mm */
  300. constant uint DMPAPER_ENV_C5 = 28 /* Envelope C5 162 x 229 mm */
  301. constant uint DMPAPER_ENV_C3 = 29 /* Envelope C3 324 x 458 mm */
  302. constant uint DMPAPER_ENV_C4 = 30 /* Envelope C4 229 x 324 mm */
  303. constant uint DMPAPER_ENV_C6 = 31 /* Envelope C6 114 x 162 mm */
  304. constant uint DMPAPER_ENV_C65 = 32 /* Envelope C65 114 x 229 mm */
  305. constant uint DMPAPER_ENV_B4 = 33 /* Envelope B4 250 x 353 mm */
  306. constant uint DMPAPER_ENV_B5 = 34 /* Envelope B5 176 x 250 mm */
  307. constant uint DMPAPER_ENV_B6 = 35 /* Envelope B6 176 x 125 mm */
  308. constant uint DMPAPER_ENV_ITALY = 36 /* Envelope 110 x 230 mm */
  309. constant uint DMPAPER_ENV_MONARCH = 37 /* Envelope Monarch 3.875 x 7.5 in */
  310. constant uint DMPAPER_ENV_PERSONAL = 38 /* 6 3/4 Envelope 3 5/8 x 6 1/2 in */
  311. constant uint DMPAPER_FANFOLD_US = 39 /* US Std Fanfold 14 7/8 x 11 in */
  312. constant uint DMPAPER_FANFOLD_STD_GERMAN = 40 /* German Std Fanfold 8 1/2 x 12 in */
  313. constant uint DMPAPER_FANFOLD_LGL_GERMAN = 41 /* German Legal Fanfold 8 1/2 x 13 in */
  314. constant uint DMPAPER_ISO_B4 = 42 /* B4 (ISO) 250 x 353 mm */
  315. constant uint DMPAPER_JAPANESE_POSTCARD = 43 /* Japanese Postcard 100 x 148 mm */
  316. constant uint DMPAPER_9X11 = 44 /* 9 x 11 in */
  317. constant uint DMPAPER_10X11 = 45 /* 10 x 11 in */
  318. constant uint DMPAPER_15X11 = 46 /* 15 x 11 in */
  319. constant uint DMPAPER_ENV_INVITE = 47 /* Envelope Invite 220 x 220 mm */
  320. constant uint DMPAPER_RESERVED_48 = 48 /* RESERVED--DO NOT USE */
  321. constant uint DMPAPER_RESERVED_49 = 49 /* RESERVED--DO NOT USE */
  322. constant uint DMPAPER_LETTER_EXTRA = 50 /* Letter Extra 9 \275 x 12 in */
  323. constant uint DMPAPER_LEGAL_EXTRA = 51 /* Legal Extra 9 \275 x 15 in */
  324. constant uint DMPAPER_TABLOID_EXTRA = 52 /* Tabloid Extra 11.69 x 18 in */
  325. constant uint DMPAPER_A4_EXTRA = 53 /* A4 Extra 9.27 x 12.69 in */
  326. constant uint DMPAPER_LETTER_TRANSVERSE = 54 /* Letter Transverse 8 \275 x 11 in */
  327. constant uint DMPAPER_A4_TRANSVERSE = 55 /* A4 Transverse 210 x 297 mm */
  328. constant uint DMPAPER_LETTER_EXTRA_TRANSVERSE =56 /* Letter Extra Transverse 9\275 x 12 in */
  329. constant uint DMPAPER_A_PLUS = 57 /* SuperA/SuperA/A4 227 x 356 mm */
  330. constant uint DMPAPER_B_PLUS = 58 /* SuperB/SuperB/A3 305 x 487 mm */
  331. constant uint DMPAPER_LETTER_PLUS = 59 /* Letter Plus 8.5 x 12.69 in */
  332. constant uint DMPAPER_A4_PLUS = 60 /* A4 Plus 210 x 330 mm */
  333. constant uint DMPAPER_A5_TRANSVERSE = 61 /* A5 Transverse 148 x 210 mm */
  334. constant uint DMPAPER_B5_TRANSVERSE = 62 /* B5 (JIS) Transverse 182 x 257 mm */
  335. constant uint DMPAPER_A3_EXTRA = 63 /* A3 Extra 322 x 445 mm */
  336. constant uint DMPAPER_A5_EXTRA = 64 /* A5 Extra 174 x 235 mm */
  337. constant uint DMPAPER_B5_EXTRA = 65 /* B5 (ISO) Extra 201 x 276 mm */
  338. constant uint DMPAPER_A2 = 66 /* A2 420 x 594 mm */
  339. constant uint DMPAPER_A3_TRANSVERSE = 67 /* A3 Transverse 297 x 420 mm */
  340. constant uint DMPAPER_A3_EXTRA_TRANSVERSE = 68 /* A3 Extra Transverse 322 x 445 mm */
  341. constant uint DMPAPER_USER = 256
  342. constant uint GMEM_MOVEABLE = 2
  343. constant int PRINTDLG_LEN = 66
  344. constant ulong PD_ALLPAGES = 000000
  345. constant ulong PD_SELECTION = 000001
  346. constant ulong PD_PAGENUMS = 000002
  347. constant ulong PD_NOSELECTION = 000004
  348. constant ulong PD_NOPAGENUMS = 000008
  349. constant ulong PD_COLLATE = 000016
  350. constant ulong PD_PRINTTOFILE = 000032
  351. constant ulong PD_PRINTSETUP = 000064
  352. constant ulong PD_NOWARNING = 0000128
  353. constant ulong PD_RETURNDC = 256
  354. constant ulong PD_RETURNIC = 512
  355. constant ulong PD_RETURNDEFAULT = 1024
  356. constant ulong PD_SHOWHELP = 2048
  357. constant ulong PD_ENABLEPRINTHOOK = 4096
  358. constant ulong PD_ENABLESETUPHOOK = 8192
  359. constant ulong PD_ENABLEPRINTTEMPLATE = 16384
  360. constant ulong PD_ENABLESETUPTEMPLATE = 32768
  361. constant ulong PD_ENABLEPRINTTEMPLATEHANDLE = 65536
  362. constant ulong PD_ENABLESETUPTEMPLATEHANDLE = 131072
  363. constant ulong PD_USEDEVMODECOPIES = 262144
  364. constant ulong PD_USEDEVMODECOPIESANDCOLLATE = 524288
  365. constant ulong PD_DISABLEPRINTTOFILE = 1048576
  366. constant ulong PD_HIDEPRINTTOFILE = 2097152
  367. constant ulong PD_NONETWORKBUTTON = 4194304
  368. constant int DEVNAMES_LEN = 32 * 3 +8
  369. constant ulong PSD_DEFAULTMINMARGINS = 0000000 // default (printer's)
  370. constant ulong PSD_INWININIINTLMEASURE = 0000000 // 1st of 4 possible
  371. constant ulong PSD_MINMARGINS = 0000001 // use caller's
  372. constant ulong PSD_MARGINS = 0000002 // use caller's
  373. constant ulong PSD_INTHOUSANDTHSOFINCHES = 0000004 // 2nd of 4 possible
  374. constant ulong PSD_INHUNDREDTHSOFMILLIMETERS = 0000008 // 3rd of 4 possible
  375. constant ulong PSD_DISABLEMARGINS = 16
  376. constant ulong PSD_DISABLEPRINTER = 32
  377. constant ulong PSD_NOWARNING = 128 // must be same as PD_*
  378. constant ulong PSD_DISABLEORIENTATION = 256
  379. constant ulong PSD_RETURNDEFAULT = 1024 // must be same as PD_*
  380. constant ulong PSD_DISABLEPAPER = 512
  381. constant ulong PSD_SHOWHELP = 2048 // must be same as PD_*
  382. constant ulong PSD_ENABLEPAGESETUPHOOK = 8192 // must be same as PD_*
  383. constant ulong PSD_ENABLEPAGESETUPTEMPLATE = 32768 // must be same as PD_*
  384. constant ulong PSD_ENABLEPAGESETUPTEMPLATEHANDLE = 131072 // must be same as PD_*
  385. constant ulong PSD_ENABLEPAGEPAINTHOOK = 262144
  386. constant ulong PSD_DISABLEPAGEPAINTING = 524288
  387. constant ulong PSD_NONETWORKBUTTON = 2097152 // must be same as PD_*
  388. constant int PAGESETUPDLG_LEN = 84
  389. end variables
  390. forward prototypes
  391. public function integer of_getprinterlist (ref string printerlist[])
  392. public function integer of_direct (string PrinterName, string data)
  393. public function integer of_printer (string printername, integer command, ref any outpara, ref integer papersize, ref integer paperwidth, ref integer paperlength)
  394. public function string of_getdrivername (string PrinterName)
  395. public function string of_getportname (string printername)
  396. public function int of_getattribute (string printername)
  397. public function long of_getstatus (string printername)
  398. public function integer of_getpapersize (string printername, ref integer papersize, ref integer paperwidth, ref integer paperheight)
  399. public function string of_getpbprinter ()
  400. public function integer of_setdefault (string printername)
  401. private function string of_getstringfromblob (blob source, integer offset)
  402. private function integer of_modifyprinter (string printername, str_devmode devmode)
  403. public function integer of_printsetup (unsignedlong hwnd)
  404. public function integer of_setpapersize (string printername, integer papersize, integer paperwidth, integer paperheight)
  405. public function integer of_pagesetup (unsignedlong hwnd, ref long left, ref long right, ref long top, ref long bottom)
  406. end prototypes
  407. public function integer of_getprinterlist (ref string printerlist[]);// 取打印机列表
  408. // 在printerlist[]中返回
  409. // 返回值为打印机个数,返回-1,错误
  410. integer li_Count , li_Size, li_i
  411. String ls_Name
  412. Blob lbl_buffer, lbl_tmp ,lbl_buffer_net
  413. ulong ll_cbNeeded, ll_Returned,ll_Returned_net
  414. str_Printer_info_2 lstr_info
  415. li_Size = 1
  416. l_GetPrinter:
  417. lbl_buffer = Blob ( Space ( li_size ) )
  418. SetNull ( ls_Name )
  419. If Not EnumPrinters( PRINTER_ENUM_LOCAL, ls_Name, 2, ref lbl_buffer, li_size, ll_cbNeeded, ll_Returned ) Then
  420. If li_size < ll_cbNeeded Then
  421. li_size = ll_cbNeeded
  422. Goto l_GetPrinter
  423. Else
  424. Return -1
  425. End If
  426. End If
  427. // cjh -020728
  428. l_GetPrinter_net:
  429. lbl_buffer_net = Blob ( Space ( li_size ) )
  430. SetNull ( ls_Name )
  431. If Not EnumPrinters( PRINTER_ENUM_CONNECTIONS, ls_Name, 2, ref lbl_buffer_net, li_size, ll_cbNeeded, ll_Returned_net ) Then
  432. If li_size < ll_cbNeeded Then
  433. li_size = ll_cbNeeded
  434. Goto l_GetPrinter_net
  435. Else
  436. Return -1
  437. End If
  438. End If
  439. string ls_desc, ls_pname, ls_comment
  440. For li_i = 1 To integer ( ll_Returned )+integer ( ll_Returned_net )
  441. lbl_tmp = BlobMid ( lbl_buffer, (li_i -1 ) * PRINTER_INFO_2_LEN + 1 )
  442. CopyMem ( lstr_info, lbl_tmp, PRINTER_INFO_2_LEN )
  443. printerlist [ li_i ] = String ( lstr_info.PrinterName, "address" )
  444. ls_pname = string ( lstr_info.PortName, "address" )
  445. Next
  446. For li_i =integer ( ll_Returned )+1 To integer ( ll_Returned )+integer ( ll_Returned_net )
  447. lbl_tmp = BlobMid ( lbl_buffer_net, (li_i -1 - integer ( ll_Returned )) * PRINTER_INFO_2_LEN + 1 )
  448. CopyMem ( lstr_info, lbl_tmp, PRINTER_INFO_2_LEN )
  449. printerlist [ li_i ] = String ( lstr_info.PrinterName, "address" )
  450. ls_pname = string ( lstr_info.PortName, "address" )
  451. Next
  452. Return Integer ( ll_Returned )+integer ( ll_Returned_net )
  453. // cjh -020728
  454. end function
  455. public function integer of_direct (string PrinterName, string data);// 绕过windows直接向打印机发送字符
  456. // PrinterName: 打印机名称
  457. // data: 需要发送的数据
  458. // 返回: 1 = 成功, 2 = 失败
  459. ulong ll_handle
  460. // 建立打印机handle
  461. ll_handle = CreateDC ( 0, PrinterName, 0, 0 )
  462. DeleteDC ( ll_handle )
  463. Return 1
  464. end function
  465. public function integer of_printer (string printername, integer command, ref any outpara, ref integer papersize, ref integer paperwidth, ref integer paperlength);// 与打印机有关的操作
  466. // PrinterName:打印机名称
  467. // Command:命令
  468. // =1: 取打印机驱动名称
  469. // = 2: 取打印机端口名称
  470. // = 3: 取打印机状态
  471. // = 4: 取打印机属性
  472. // = 5: 取打印机纸张
  473. // = 6: 取打印机自定义纸张的大小
  474. // = 7: 取打印方向
  475. // = 8: 设置为缺省打印机
  476. // = 101: 设置打印机的纸张
  477. // = 102: 将打印机设为自定义纸张并设定自定义纸张的大小
  478. // = 103: 设置打印方向
  479. // outpara: 1,2,3,4, 打印机参数由此返回
  480. // papersize: 打印纸大小
  481. // pagerwidth, pagerheight:自定义打印纸尺
  482. // 取得打印机打印纸
  483. // return 1: 成功
  484. // return -1: 不成功
  485. str_Printer_info_2 lstr_info
  486. str_Printer_defaults lstr_default
  487. str_devmode lstr_devmode
  488. Integer li_rc, li_i
  489. string ls_DriverName, ls_PortName
  490. ulong ll_handle, ll_cbbuf, ll_cbNeeded
  491. blob lbl_buffer
  492. // 打开打印机
  493. If Not OpenPrinter ( printername, ll_handle, ref lstr_default ) Then Return -1
  494. ll_cbbuf = 0
  495. // 取打印机驱动名称
  496. ll_cbBuf = 0
  497. l_SetBuffer:
  498. lbl_buffer = Blob ( Space ( ll_cbBuf ) )
  499. If Not GetPrinter ( ll_handle, 2, ref lbl_buffer, ll_cbBuf, ll_cbNeeded ) Then
  500. If ll_cbNeeded > ll_cbBuf Then
  501. ll_cbBuf = ll_cbNeeded
  502. Goto l_SetBuffer
  503. Else
  504. Return -1
  505. End If
  506. End If
  507. // copy 至结构
  508. CopyMem ( lstr_info, lbl_buffer, PRINTER_INFO_2_LEN )
  509. // 驱动名、端口
  510. ls_DriverName = String ( lstr_info.DriverName, "address" )
  511. ls_PortName = String ( lstr_info.PortName, "address" )
  512. Choose Case Command
  513. Case 1
  514. // 驱动名称
  515. OutPara = ls_DriverName
  516. li_rc = 1
  517. Goto l_quit
  518. Case 2
  519. // 端口名称
  520. OutPara = ls_PortName
  521. li_rc = 1
  522. Goto l_quit
  523. Case 3
  524. // 打印机状态
  525. OutPara = lstr_info.Status
  526. li_rc = 1
  527. Goto l_quit
  528. Case 4
  529. // 打印机属性
  530. OutPara = lstr_info.Attributes
  531. li_rc = 1
  532. Goto l_quit
  533. Case 5,6
  534. // 打印纸大小
  535. CopyMem ( lstr_devmode, lstr_info.DevMode, DEVMODE_LEN )
  536. papersize = lstr_devMode.dmPaperSize
  537. paperwidth = lstr_devMode.dmPaperWidth
  538. paperlength = lstr_devMode.dmPaperLength
  539. li_rc = 1
  540. Goto l_quit
  541. Case 7
  542. // 打印方向
  543. CopyMem ( lstr_devmode, lstr_info.DevMode, DEVMODE_LEN )
  544. OutPara = lstr_devMode.dmOrientation
  545. li_rc = 1
  546. Goto l_quit
  547. Case 105
  548. // 设置为缺省打印机
  549. lstr_info.Attributes += PRINTER_ATTRIBUTE_DEFAULT
  550. CopyMem ( lbl_buffer, lstr_info, PRINTER_INFO_2_LEN )
  551. If SetPrinter ( ll_handle , 2, lbl_buffer, 0 ) Then
  552. li_rc = 1
  553. Else
  554. li_rc = -1
  555. end If
  556. Goto l_quit
  557. End Choose
  558. If Command = 101 Or Command = 102 Then
  559. // 取打印机支持的纸张
  560. SetNull ( lbl_buffer )
  561. ll_cbbuf = DeviceCapabilities ( printername, ls_PortName, DC_PAPERS, 0, 0 )
  562. lbl_buffer = Blob ( Space ( 1024 ) ) // ll_cbbuf ) )
  563. ll_cbbuf = DeviceCapabilities ( PrinterName, ls_PortName, DC_PAPERS, lbl_buffer, 0 )
  564. If ll_cbbuf < 0 Then Return -1
  565. // 检查是否支持用户指定纸张
  566. For li_i =1 To Integer ( ll_cbbuf )
  567. If integer ( BlobMid ( lbl_buffer, ( li_i - 1 ) * 2 + 1, 2 ) ) = papersize Then Exit
  568. Next
  569. If li_i > Integer ( ll_cbbuf ) Then
  570. // 不支持自定久纸张
  571. Return -1
  572. End If
  573. End If
  574. // 取需要的空间
  575. ll_cbbuf =DocumentProperties ( 0, ll_handle, ls_DriverName, ref lbl_buffer, 0 , 0 )
  576. If ll_cbbuf < 0 Then
  577. li_rc = -1
  578. Goto l_quit
  579. End If
  580. // 分配空间
  581. lbl_buffer = Blob ( Space ( ll_cbbuf ) )
  582. li_rc = DocumentProperties ( 0, ll_handle, ls_DriverName, ref lbl_buffer, 0, DM_OUT_BUFFER )
  583. CopyMem ( lstr_devmode, lbl_buffer, DEVMODE_LEN )
  584. Choose Case command
  585. Case 101,102
  586. lstr_devMode.dmPaperSize = papersize
  587. lstr_devMode.dmFields = DM_PAPERSIZE
  588. If PaperSize = DMPAPER_USER Then
  589. lstr_devMode.dmPaperWidth = paperwidth
  590. lstr_devMode.dmPaperLength = paperlength
  591. lstr_devMode.dmFields += DM_PAPERLENGTH + DM_PAPERWIDTH
  592. End If
  593. Case 103
  594. lstr_devMode.dmOrientation = outpara
  595. lstr_devMode.dmFields = DM_ORIENTATION
  596. End Choose
  597. li_rc = DocumentProperties ( 0, ll_handle, ls_DriverName, 0, lstr_devmode, DM_IN_BUFFER + DM_OUT_DEFAULT )
  598. If li_rc > 0 Then li_rc = 1
  599. l_quit:
  600. ClosePrinter ( ll_handle )
  601. Return li_rc
  602. end function
  603. public function string of_getdrivername (string PrinterName);// 取打印机驱动程序名称
  604. String ls_Driver
  605. Integer li_1, li_2, li_3, li_rc
  606. Any la_para
  607. li_rc = of_Printer ( PrinterName, 1, la_para, li_1, li_2, li_3 )
  608. If li_rc = 1 Then
  609. ls_Driver = String ( la_para )
  610. Else
  611. ls_Driver = ''
  612. End If
  613. Return ls_Driver
  614. end function
  615. public function string of_getportname (string printername);// 取打印机端口名称
  616. String ls_port
  617. Integer li_1, li_2, li_3, li_rc
  618. Any la_para
  619. li_rc = of_Printer ( PrinterName, 2, la_para, li_1, li_2, li_3 )
  620. If li_rc = 1 Then
  621. ls_port = String ( la_para )
  622. Else
  623. ls_port = ''
  624. End If
  625. Return ls_port
  626. end function
  627. public function int of_getattribute (string printername);// 取打印机属性,下为打印机属性定义
  628. /*
  629. #define PRINTER_ATTRIBUTE_QUEUED 0x00000001
  630. #define PRINTER_ATTRIBUTE_DIRECT 0x00000002
  631. #define PRINTER_ATTRIBUTE_DEFAULT 0x00000004
  632. #define PRINTER_ATTRIBUTE_SHARED 0x00000008
  633. #define PRINTER_ATTRIBUTE_NETWORK 0x00000010
  634. #define PRINTER_ATTRIBUTE_HIDDEN 0x00000020
  635. #define PRINTER_ATTRIBUTE_LOCAL 0x00000040
  636. #define PRINTER_ATTRIBUTE_ENABLE_DEVQ 0x00000080
  637. #define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS 0x00000100
  638. #define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200
  639. #define PRINTER_ATTRIBUTE_WORK_OFFLINE 0x00000400
  640. #define PRINTER_ATTRIBUTE_ENABLE_BIDI 0x00000800
  641. #define PRINTER_ATTRIBUTE_RAW_ONLY 0x00001000
  642. #define PRINTER_ATTRIBUTE_PUBLISHED 0x00002000
  643. */
  644. int li_attrib
  645. Integer li_1, li_2, li_3, li_rc
  646. Any la_para
  647. li_rc = of_Printer ( PrinterName, 2, la_para, li_1, li_2, li_3 )
  648. If li_rc = 1 Then
  649. li_attrib = la_para
  650. Else
  651. li_attrib = -1
  652. End If
  653. Return li_attrib
  654. end function
  655. public function long of_getstatus (string printername);// 取打印机状态,下为打印机状态定义
  656. /*
  657. #define PRINTER_STATUS_PAUSED 0x00000001
  658. #define PRINTER_STATUS_ERROR 0x00000002
  659. #define PRINTER_STATUS_PENDING_DELETION 0x00000004
  660. #define PRINTER_STATUS_PAPER_JAM 0x00000008
  661. #define PRINTER_STATUS_PAPER_OUT 0x00000010
  662. #define PRINTER_STATUS_MANUAL_FEED 0x00000020
  663. #define PRINTER_STATUS_PAPER_PROBLEM 0x00000040
  664. #define PRINTER_STATUS_OFFLINE 0x00000080
  665. #define PRINTER_STATUS_IO_ACTIVE 0x00000100
  666. #define PRINTER_STATUS_BUSY 0x00000200
  667. #define PRINTER_STATUS_PRINTING 0x00000400
  668. #define PRINTER_STATUS_OUTPUT_BIN_FULL 0x00000800
  669. #define PRINTER_STATUS_NOT_AVAILABLE 0x00001000
  670. #define PRINTER_STATUS_WAITING 0x00002000
  671. #define PRINTER_STATUS_PROCESSING 0x00004000
  672. #define PRINTER_STATUS_INITIALIZING 0x00008000
  673. #define PRINTER_STATUS_WARMING_UP 0x00010000
  674. #define PRINTER_STATUS_TONER_LOW 0x00020000
  675. #define PRINTER_STATUS_NO_TONER 0x00040000
  676. #define PRINTER_STATUS_PAGE_PUNT 0x00080000
  677. #define PRINTER_STATUS_USER_INTERVENTION 0x00100000
  678. #define PRINTER_STATUS_OUT_OF_MEMORY 0x00200000
  679. #define PRINTER_STATUS_DOOR_OPEN 0x00400000
  680. #define PRINTER_STATUS_SERVER_UNKNOWN 0x00800000
  681. #define PRINTER_STATUS_POWER_SAVE 0x01000000
  682. */
  683. long ll_status
  684. Integer li_1, li_2, li_3, li_rc
  685. Any la_para
  686. li_rc = of_Printer ( PrinterName, 3, la_para, li_1, li_2, li_3 )
  687. If li_rc = 1 Then
  688. ll_status = la_para
  689. Else
  690. ll_status = -1
  691. End If
  692. Return ll_status
  693. end function
  694. public function integer of_getpapersize (string printername, ref integer papersize, ref integer paperwidth, ref integer paperheight);// 取打印机纸张大小
  695. /* 打印机尺寸定义
  696. #define DMPAPER_LETTER 1 /* Letter 8 1/2 x 11 in */
  697. #define DMPAPER_LETTERSMALL 2 /* Letter Small 8 1/2 x 11 in */
  698. #define DMPAPER_TABLOID 3 /* Tabloid 11 x 17 in */
  699. #define DMPAPER_LEDGER 4 /* Ledger 17 x 11 in */
  700. #define DMPAPER_LEGAL 5 /* Legal 8 1/2 x 14 in */
  701. #define DMPAPER_STATEMENT 6 /* Statement 5 1/2 x 8 1/2 in */
  702. #define DMPAPER_EXECUTIVE 7 /* Executive 7 1/4 x 10 1/2 in */
  703. #define DMPAPER_A3 8 /* A3 297 x 420 mm */
  704. #define DMPAPER_A4 9 /* A4 210 x 297 mm */
  705. #define DMPAPER_A4SMALL 10 /* A4 Small 210 x 297 mm */
  706. #define DMPAPER_A5 11 /* A5 148 x 210 mm */
  707. #define DMPAPER_B4 12 /* B4 (JIS) 250 x 354 */
  708. #define DMPAPER_B5 13 /* B5 (JIS) 182 x 257 mm */
  709. #define DMPAPER_FOLIO 14 /* Folio 8 1/2 x 13 in */
  710. #define DMPAPER_QUARTO 15 /* Quarto 215 x 275 mm */
  711. #define DMPAPER_10X14 16 /* 10x14 in */
  712. #define DMPAPER_11X17 17 /* 11x17 in */
  713. #define DMPAPER_NOTE 18 /* Note 8 1/2 x 11 in */
  714. #define DMPAPER_ENV_9 19 /* Envelope #9 3 7/8 x 8 7/8 */
  715. #define DMPAPER_ENV_10 20 /* Envelope #10 4 1/8 x 9 1/2 */
  716. #define DMPAPER_ENV_11 21 /* Envelope #11 4 1/2 x 10 3/8 */
  717. #define DMPAPER_ENV_12 22 /* Envelope #12 4 \276 x 11 */
  718. #define DMPAPER_ENV_14 23 /* Envelope #14 5 x 11 1/2 */
  719. #define DMPAPER_CSHEET 24 /* C size sheet */
  720. #define DMPAPER_DSHEET 25 /* D size sheet */
  721. #define DMPAPER_ESHEET 26 /* E size sheet */
  722. #define DMPAPER_ENV_DL 27 /* Envelope DL 110 x 220mm */
  723. #define DMPAPER_ENV_C5 28 /* Envelope C5 162 x 229 mm */
  724. #define DMPAPER_ENV_C3 29 /* Envelope C3 324 x 458 mm */
  725. #define DMPAPER_ENV_C4 30 /* Envelope C4 229 x 324 mm */
  726. #define DMPAPER_ENV_C6 31 /* Envelope C6 114 x 162 mm */
  727. #define DMPAPER_ENV_C65 32 /* Envelope C65 114 x 229 mm */
  728. #define DMPAPER_ENV_B4 33 /* Envelope B4 250 x 353 mm */
  729. #define DMPAPER_ENV_B5 34 /* Envelope B5 176 x 250 mm */
  730. #define DMPAPER_ENV_B6 35 /* Envelope B6 176 x 125 mm */
  731. #define DMPAPER_ENV_ITALY 36 /* Envelope 110 x 230 mm */
  732. #define DMPAPER_ENV_MONARCH 37 /* Envelope Monarch 3.875 x 7.5 in */
  733. #define DMPAPER_ENV_PERSONAL 38 /* 6 3/4 Envelope 3 5/8 x 6 1/2 in */
  734. #define DMPAPER_FANFOLD_US 39 /* US Std Fanfold 14 7/8 x 11 in */
  735. #define DMPAPER_FANFOLD_STD_GERMAN 40 /* German Std Fanfold 8 1/2 x 12 in */
  736. #define DMPAPER_FANFOLD_LGL_GERMAN 41 /* German Legal Fanfold 8 1/2 x 13 in */
  737. #if(WINVER >= 0x0400)
  738. #define DMPAPER_ISO_B4 42 /* B4 (ISO) 250 x 353 mm */
  739. #define DMPAPER_JAPANESE_POSTCARD 43 /* Japanese Postcard 100 x 148 mm */
  740. #define DMPAPER_9X11 44 /* 9 x 11 in */
  741. #define DMPAPER_10X11 45 /* 10 x 11 in */
  742. #define DMPAPER_15X11 46 /* 15 x 11 in */
  743. #define DMPAPER_ENV_INVITE 47 /* Envelope Invite 220 x 220 mm */
  744. #define DMPAPER_RESERVED_48 48 /* RESERVED--DO NOT USE */
  745. #define DMPAPER_RESERVED_49 49 /* RESERVED--DO NOT USE */
  746. #define DMPAPER_LETTER_EXTRA 50 /* Letter Extra 9 \275 x 12 in */
  747. #define DMPAPER_LEGAL_EXTRA 51 /* Legal Extra 9 \275 x 15 in */
  748. #define DMPAPER_TABLOID_EXTRA 52 /* Tabloid Extra 11.69 x 18 in */
  749. #define DMPAPER_A4_EXTRA 53 /* A4 Extra 9.27 x 12.69 in */
  750. #define DMPAPER_LETTER_TRANSVERSE 54 /* Letter Transverse 8 \275 x 11 in */
  751. #define DMPAPER_A4_TRANSVERSE 55 /* A4 Transverse 210 x 297 mm */
  752. #define DMPAPER_LETTER_EXTRA_TRANSVERSE 56 /* Letter Extra Transverse 9\275 x 12 in */
  753. #define DMPAPER_A_PLUS 57 /* SuperA/SuperA/A4 227 x 356 mm */
  754. #define DMPAPER_B_PLUS 58 /* SuperB/SuperB/A3 305 x 487 mm */
  755. #define DMPAPER_LETTER_PLUS 59 /* Letter Plus 8.5 x 12.69 in */
  756. #define DMPAPER_A4_PLUS 60 /* A4 Plus 210 x 330 mm */
  757. #define DMPAPER_A5_TRANSVERSE 61 /* A5 Transverse 148 x 210 mm */
  758. #define DMPAPER_B5_TRANSVERSE 62 /* B5 (JIS) Transverse 182 x 257 mm */
  759. #define DMPAPER_A3_EXTRA 63 /* A3 Extra 322 x 445 mm */
  760. #define DMPAPER_A5_EXTRA 64 /* A5 Extra 174 x 235 mm */
  761. #define DMPAPER_B5_EXTRA 65 /* B5 (ISO) Extra 201 x 276 mm */
  762. #define DMPAPER_A2 66 /* A2 420 x 594 mm */
  763. #define DMPAPER_A3_TRANSVERSE 67 /* A3 Transverse 297 x 420 mm */
  764. #define DMPAPER_A3_EXTRA_TRANSVERSE 68 /* A3 Extra Transverse 322 x 445 mm */
  765. #endif /* WINVER >= 0x0400 */
  766. #if(WINVER >= 0x0500)
  767. #define DMPAPER_DBL_JAPANESE_POSTCARD 69 /* Japanese Double Postcard 200 x 148 mm */
  768. #define DMPAPER_A6 70 /* A6 105 x 148 mm */
  769. #define DMPAPER_JENV_KAKU2 71 /* Japanese Envelope Kaku #2 */
  770. #define DMPAPER_JENV_KAKU3 72 /* Japanese Envelope Kaku #3 */
  771. #define DMPAPER_JENV_CHOU3 73 /* Japanese Envelope Chou #3 */
  772. #define DMPAPER_JENV_CHOU4 74 /* Japanese Envelope Chou #4 */
  773. #define DMPAPER_LETTER_ROTATED 75 /* Letter Rotated 11 x 8 1/2 11 in */
  774. #define DMPAPER_A3_ROTATED 76 /* A3 Rotated 420 x 297 mm */
  775. #define DMPAPER_A4_ROTATED 77 /* A4 Rotated 297 x 210 mm */
  776. #define DMPAPER_A5_ROTATED 78 /* A5 Rotated 210 x 148 mm */
  777. #define DMPAPER_B4_JIS_ROTATED 79 /* B4 (JIS) Rotated 364 x 257 mm */
  778. #define DMPAPER_B5_JIS_ROTATED 80 /* B5 (JIS) Rotated 257 x 182 mm */
  779. #define DMPAPER_JAPANESE_POSTCARD_ROTATED 81 /* Japanese Postcard Rotated 148 x 100 mm */
  780. #define DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82 /* Double Japanese Postcard Rotated 148 x 200 mm */
  781. #define DMPAPER_A6_ROTATED 83 /* A6 Rotated 148 x 105 mm */
  782. #define DMPAPER_JENV_KAKU2_ROTATED 84 /* Japanese Envelope Kaku #2 Rotated */
  783. #define DMPAPER_JENV_KAKU3_ROTATED 85 /* Japanese Envelope Kaku #3 Rotated */
  784. #define DMPAPER_JENV_CHOU3_ROTATED 86 /* Japanese Envelope Chou #3 Rotated */
  785. #define DMPAPER_JENV_CHOU4_ROTATED 87 /* Japanese Envelope Chou #4 Rotated */
  786. #define DMPAPER_B6_JIS 88 /* B6 (JIS) 128 x 182 mm */
  787. #define DMPAPER_B6_JIS_ROTATED 89 /* B6 (JIS) Rotated 182 x 128 mm */
  788. #define DMPAPER_12X11 90 /* 12 x 11 in */
  789. #define DMPAPER_JENV_YOU4 91 /* Japanese Envelope You #4 */
  790. #define DMPAPER_JENV_YOU4_ROTATED 92 /* Japanese Envelope You #4 Rotated*/
  791. #define DMPAPER_P16K 93 /* PRC 16K 146 x 215 mm */
  792. #define DMPAPER_P32K 94 /* PRC 32K 97 x 151 mm */
  793. #define DMPAPER_P32KBIG 95 /* PRC 32K(Big) 97 x 151 mm */
  794. #define DMPAPER_PENV_1 96 /* PRC Envelope #1 102 x 165 mm */
  795. #define DMPAPER_PENV_2 97 /* PRC Envelope #2 102 x 176 mm */
  796. #define DMPAPER_PENV_3 98 /* PRC Envelope #3 125 x 176 mm */
  797. #define DMPAPER_PENV_4 99 /* PRC Envelope #4 110 x 208 mm */
  798. #define DMPAPER_PENV_5 100 /* PRC Envelope #5 110 x 220 mm */
  799. #define DMPAPER_PENV_6 101 /* PRC Envelope #6 120 x 230 mm */
  800. #define DMPAPER_PENV_7 102 /* PRC Envelope #7 160 x 230 mm */
  801. #define DMPAPER_PENV_8 103 /* PRC Envelope #8 120 x 309 mm */
  802. #define DMPAPER_PENV_9 104 /* PRC Envelope #9 229 x 324 mm */
  803. #define DMPAPER_PENV_10 105 /* PRC Envelope #10 324 x 458 mm */
  804. #define DMPAPER_P16K_ROTATED 106 /* PRC 16K Rotated */
  805. #define DMPAPER_P32K_ROTATED 107 /* PRC 32K Rotated */
  806. #define DMPAPER_P32KBIG_ROTATED 108 /* PRC 32K(Big) Rotated */
  807. #define DMPAPER_PENV_1_ROTATED 109 /* PRC Envelope #1 Rotated 165 x 102 mm */
  808. #define DMPAPER_PENV_2_ROTATED 110 /* PRC Envelope #2 Rotated 176 x 102 mm */
  809. #define DMPAPER_PENV_3_ROTATED 111 /* PRC Envelope #3 Rotated 176 x 125 mm */
  810. #define DMPAPER_PENV_4_ROTATED 112 /* PRC Envelope #4 Rotated 208 x 110 mm */
  811. #define DMPAPER_PENV_5_ROTATED 113 /* PRC Envelope #5 Rotated 220 x 110 mm */
  812. #define DMPAPER_PENV_6_ROTATED 114 /* PRC Envelope #6 Rotated 230 x 120 mm */
  813. #define DMPAPER_PENV_7_ROTATED 115 /* PRC Envelope #7 Rotated 230 x 160 mm */
  814. #define DMPAPER_PENV_8_ROTATED 116 /* PRC Envelope #8 Rotated 309 x 120 mm */
  815. #define DMPAPER_PENV_9_ROTATED 117 /* PRC Envelope #9 Rotated 324 x 229 mm */
  816. #define DMPAPER_PENV_10_ROTATED 118 /* PRC Envelope #10 Rotated 458 x 324 mm */
  817. #endif /* WINVER >= 0x0500 */
  818. #if (WINVER >= 0x0500)
  819. #define DMPAPER_LAST DMPAPER_PENV_10_ROTATED
  820. #elif (WINVER >= 0x0400)
  821. #define DMPAPER_LAST DMPAPER_A3_EXTRA_TRANSVERSE
  822. #else
  823. #define DMPAPER_LAST DMPAPER_FANFOLD_LGL_GERMAN
  824. #endif
  825. #define DMPAPER_USER 256
  826. */
  827. Integer li_rc
  828. any la_buff
  829. Return of_Printer ( printername, 5, la_buff, papersize,paperwidth,paperheight )
  830. end function
  831. public function string of_getpbprinter ();String ls_printer
  832. Integer li_Pos
  833. ls_printer = ProfileString ( "win.ini", "windows", "device", "" )
  834. //messagebox('',ls_printer)
  835. //setProfileString ( "win.ini", "windows", "device", "HP LaserJet 5L" )
  836. //ls_printer = ProfileString ( "win.ini", "windows", "device", "" )
  837. //
  838. //messagebox('',ls_printer)
  839. If ls_printer = "" then Return ""
  840. li_Pos = Pos ( ls_printer, "," )
  841. If li_Pos <> 0 Then
  842. ls_printer = Left ( ls_printer, li_Pos - 1 )
  843. End If
  844. Return ls_printer
  845. end function
  846. public function integer of_setdefault (string printername);// 设置为缺省打印机
  847. //integer li_size, li_width, li_length
  848. //any la_any
  849. //Return of_Printer( printername, 105, la_any, li_size, li_width, li_length )
  850. //
  851. //
  852. string ls_s
  853. ls_s=f_ProfileString (sys_empid,"devices", printername, 'winspool,')
  854. f_SetProfileString (sys_empid,"windows", "device", printername+','+ls_s)
  855. Return 1
  856. end function
  857. private function string of_getstringfromblob (blob source, integer offset);// 从指定位置得到一个以0结束的字符串
  858. String ls_char, ls_target
  859. Integer li_i
  860. For li_i = offset To Len ( source )
  861. ls_char = String ( BlobMid ( source, li_i, 1 ) )
  862. If Len ( ls_char ) = 0 Then Exit
  863. ls_target += ls_char
  864. Next
  865. Return ls_target
  866. end function
  867. private function integer of_modifyprinter (string printername, str_devmode devmode);// 修改打印机参数
  868. // 仅供内部使用
  869. // 与打印机有关的操作
  870. // return 1: 成功
  871. // return -1: 不成功
  872. str_Printer_info_2 lstr_info
  873. str_Printer_defaults lstr_default
  874. str_devmode lstr_devmode
  875. Integer li_rc, li_i
  876. string ls_DriverName, ls_PortName
  877. ulong ll_handle, ll_cbbuf, ll_cbNeeded
  878. blob lbl_buffer
  879. // 打开打印机
  880. If Not OpenPrinter ( printername, ll_handle, ref lstr_default ) Then Return -1
  881. ll_cbbuf = 0
  882. // 取打印机驱动名称
  883. ll_cbBuf = 0
  884. l_SetBuffer:
  885. lbl_buffer = Blob ( Space ( ll_cbBuf ) )
  886. If Not GetPrinter ( ll_handle, 2, ref lbl_buffer, ll_cbBuf, ll_cbNeeded ) Then
  887. If ll_cbNeeded > ll_cbBuf Then
  888. ll_cbBuf = ll_cbNeeded
  889. Goto l_SetBuffer
  890. Else
  891. li_rc = -1
  892. Goto l_quit
  893. End If
  894. End If
  895. // copy 至结构
  896. CopyMem ( lstr_info, lbl_buffer, PRINTER_INFO_2_LEN )
  897. // 驱动名、端口
  898. ls_DriverName = String ( lstr_info.DriverName, "address" )
  899. ls_PortName = String ( lstr_info.PortName, "address" )
  900. // 设置更新所有属性
  901. devMode.dmFields = 536870911
  902. li_rc = DocumentProperties ( 0, ll_handle, ls_DriverName, 0, devmode, DM_IN_BUFFER + DM_OUT_DEFAULT )
  903. If li_rc > 0 Then li_rc = 1
  904. l_quit:
  905. ClosePrinter ( ll_handle )
  906. Return li_rc
  907. end function
  908. public function integer of_printsetup (unsignedlong hwnd);str_PrintDlg lstr_Dlg
  909. str_devmode lstr_devmode
  910. str_devnames lstr_devNames
  911. String ls_printer, ls_driver, ls_port, ls_char
  912. Blob lbl_buffer
  913. ulong ll_mem, ll_length
  914. // 初始化结构参数
  915. lstr_Dlg.lStructSize = PRINTDLG_LEN
  916. lstr_Dlg.hwndOwner = hwnd
  917. lstr_Dlg.hDevMode = 0
  918. lstr_Dlg.hDevNames = 0
  919. lstr_Dlg.flags = PD_PRINTTOFILE + PD_NOPAGENUMS + PD_NOSELECTION + PD_USEDEVMODECOPIESANDCOLLATE
  920. lstr_Dlg.hInstance = 0
  921. lstr_Dlg.lCustData = 0
  922. lstr_Dlg.lpfnPrintHook = 0
  923. lstr_Dlg.lpfnSetupHook = 0
  924. lstr_Dlg.lpPrintTemplateName = 0
  925. lstr_Dlg.lpSetupTemplateName = 0
  926. lstr_Dlg.hPrintTemplate = 0
  927. lstr_Dlg.hSetupTemplate = 0
  928. If PrintDlg ( lstr_Dlg ) <> 0 Then
  929. // 取devmode
  930. ll_mem = GlobalLock ( lstr_Dlg.hDevMode )
  931. CopyMem ( lstr_devmode, ll_mem, DEVMODE_LEN )
  932. GlobalUnlock ( lstr_Dlg.hDevMode )
  933. // 取devnames
  934. // 这个结构记录用户设置的打印机
  935. // 取长度
  936. ll_Length = GlobalSize ( lstr_Dlg.hDevNames )
  937. ll_mem = GlobalLock ( lstr_Dlg.hDevNames )
  938. CopyMem ( lstr_devNames, ll_mem, DEVNAMES_LEN )
  939. // 分配空间
  940. lbl_buffer = Blob ( Space ( ll_length ) )
  941. CopyMem ( lbl_buffer, ll_mem, ll_length )
  942. GlobalUnlock ( lstr_Dlg.hDevNames )
  943. // 打印机名称
  944. ls_printer = of_GetStringFromBlob ( lbl_buffer, lstr_devNames.wDeviceOffset + 1 )
  945. // 驱动程序,可能是以前的16位系统留下的东西吧?
  946. ls_driver = of_GetStringFromBlob ( lbl_buffer, lstr_devNames.wDriverOffset + 1 )
  947. // 打印端口
  948. ls_port = of_GetStringFromBlob ( lbl_buffer, lstr_devNames.wOutputOffset + 1 )
  949. // 更新打印机属性
  950. of_ModifyPrinter ( ls_printer, lstr_devMode )
  951. // 将打印机设置为缺省打印机
  952. of_SetDefault ( ls_printer )
  953. Else
  954. Return -1
  955. End If
  956. Return 1
  957. end function
  958. public function integer of_setpapersize (string printername, integer papersize, integer paperwidth, integer paperheight);any la_any
  959. Return of_Printer( printername, 101, la_any, papersize,paperwidth,paperheight )
  960. end function
  961. public function integer of_pagesetup (unsignedlong hwnd, ref long left, ref long right, ref long top, ref long bottom);// 打印机页面设置
  962. // 返回1:用户选择确定
  963. // 左右上下边界放在left, right,top,bottom中返回
  964. str_PageSetupDlg lstr_Dlg
  965. str_devmode lstr_devmode
  966. str_devnames lstr_devNames
  967. String ls_printer, ls_driver, ls_port, ls_char
  968. Blob lbl_buffer
  969. ulong ll_mem, ll_length
  970. // 初始化结构参数
  971. lstr_Dlg.lStructSize = PAGESETUPDLG_LEN
  972. lstr_Dlg.hwndOwner = hwnd
  973. lstr_Dlg.hDevMode = 0
  974. lstr_Dlg.hDevNames = 0
  975. lstr_Dlg.flags = PSD_DEFAULTMINMARGINS + PSD_INHUNDREDTHSOFMILLIMETERS
  976. lstr_Dlg.hInstance = 0
  977. lstr_Dlg.lCustData = 0
  978. If PageSetupDlg ( lstr_Dlg ) Then
  979. // 取devmode
  980. ll_mem = GlobalLock ( lstr_Dlg.hDevMode )
  981. CopyMem ( lstr_devmode, ll_mem, DEVMODE_LEN )
  982. GlobalUnlock ( lstr_Dlg.hDevMode )
  983. // 取devnames
  984. // 这个结构记录用户设置的打印机
  985. // 取长度
  986. ll_Length = GlobalSize ( lstr_Dlg.hDevNames )
  987. ll_mem = GlobalLock ( lstr_Dlg.hDevNames )
  988. CopyMem ( lstr_devNames, ll_mem, DEVNAMES_LEN )
  989. // 分配空间
  990. lbl_buffer = Blob ( Space ( ll_length ) )
  991. CopyMem ( lbl_buffer, ll_mem, ll_length )
  992. GlobalUnlock ( lstr_Dlg.hDevNames )
  993. // 打印机名称
  994. ls_printer = of_GetStringFromBlob ( lbl_buffer, lstr_devNames.wDeviceOffset + 1 )
  995. // 驱动程序,可能是以前的16位系统留下的东西吧?
  996. ls_driver = of_GetStringFromBlob ( lbl_buffer, lstr_devNames.wDriverOffset + 1 )
  997. // 打印端口
  998. ls_port = of_GetStringFromBlob ( lbl_buffer, lstr_devNames.wOutputOffset + 1 )
  999. // 更新打印机属性
  1000. of_ModifyPrinter ( ls_printer, lstr_devMode )
  1001. // 将打印机设置为缺省打印机
  1002. of_SetDefault ( ls_printer )
  1003. Left = lstr_Dlg.rtMargin.Left
  1004. Right = lstr_Dlg.rtMargin.Right
  1005. Top = lstr_Dlg.rtMargin.Top
  1006. Bottom = lstr_Dlg.rtMargin.Bottom
  1007. Else
  1008. Return -1
  1009. End If
  1010. Return 1
  1011. end function
  1012. on uo_rpt_printer_setting.create
  1013. call super::create
  1014. TriggerEvent( this, "constructor" )
  1015. end on
  1016. on uo_rpt_printer_setting.destroy
  1017. TriggerEvent( this, "destructor" )
  1018. call super::destroy
  1019. end on
  1020. event constructor;//// 形成打印机列表
  1021. //String ls_list [ ]
  1022. //String ls_driver, ls_port, ls_PBPrinter
  1023. //Integer li_i, li_count, li_size, li_width, li_length, li_row
  1024. //datawindow ldw_list
  1025. //ldw_list = tab_1.tabpage_1.dw_list
  1026. //
  1027. //// 取打印机列表
  1028. //li_count = lnv_printer.of_GetPrinterList ( ls_list )
  1029. //
  1030. //// 取PB缺省打印机
  1031. //ls_PBPrinter = lnv_printer.of_GetPBPrinter ( )
  1032. //
  1033. //// 清除数据
  1034. //li_row = ldw_list.GetRow ( )
  1035. //
  1036. //ldw_list.SetRedraw ( False )
  1037. //ldw_list.Reset ( )
  1038. //For li_i = 1 To li_count
  1039. // ldw_list.InsertRow ( 0 )
  1040. // ldw_list.Setitem ( li_i, "printername", ls_list [ li_i ] )
  1041. // ls_driver = lnv_printer.of_GetDriverName ( ls_list [ li_i ] )
  1042. // ls_port = lnv_printer.of_GetPortName ( ls_list [ li_i ] )
  1043. // ldw_list.setitem ( li_i, "drivername", ls_driver )
  1044. // ldw_list.setitem ( li_i, "portname", ls_port )
  1045. //
  1046. // If ls_PBPrinter = ls_list [ li_i ] Then
  1047. // ldw_list.Setitem ( li_i, "pbdefault", 1 )
  1048. // End If
  1049. //
  1050. // // 取打印纸大小
  1051. // lnv_printer.of_GetPaperSize ( ls_list [ li_i ], li_size, li_width, li_length )
  1052. // ldw_list.Setitem ( li_i, "papersize", li_size )
  1053. // ldw_list.Setitem ( li_i, "paperwidth", li_width )
  1054. // ldw_list.Setitem ( li_i, "paperheight", li_length )
  1055. //Next
  1056. //
  1057. //If li_row <> 0 Then
  1058. // ldw_list.ScrollToRow ( li_row )
  1059. //End If
  1060. //
  1061. //ldw_list.setRedraw ( True )
  1062. //Return 1
  1063. end event