#Define SIZEOF_PRINTDLGEX 84 >>#Define SIZEOF_PRINTPAGERANGE 8 >>** nFlag options >>#Define PD_ALLPAGES 0x00000000 >>#Define PD_SELECTION 0x00000001 >>#Define PD_PAGENUMS 0x00000002 >>#Define PD_NOSELECTION 0x00000004 >>#Define PD_NOPAGENUMS 0x00000008 >>#Define PD_COLLATE 0x00000010 >>#Define PD_PRINTTOFILE 0x00000020 >>#Define PD_PRINTSETUP 0x00000040 >>#Define PD_NOWARNING 0x00000080 >>#Define PD_RETURNDC 0x00000100 >>#Define PD_RETURNIC 0x00000200 >>#Define PD_RETURNDEFAULT 0x00000400 >>#Define PD_SHOWHELP 0x00000800 >>#Define PD_USEDEVMODECOPIES 0x00040000 >>#Define PD_USEDEVMODECOPIESANDCOLLATE 0x00040000 >>#Define PD_DISABLEPRINTTOFILE 0x00080000 >>#Define PD_HIDEPRINTTOFILE 0x00100000 >>#Define PD_NONETWORKBUTTON 0x00200000 >>#Define PD_CURRENTPAGE 0x00400000 >>#Define PD_NOCURRENTPAGE 0x00800000 >>#Define START_PAGE_GENERAL Bitlshift(0xffffffff,0) >>#Define GMEM_FIXED 0x00 >>#Define GMEM_ZEROINIT 0x40 >>#Define GPTR (GMEM_FIXED+GMEM_ZEROINIT) >>#Define DM_OUT_BUFFER 2 >>#Define DM_IN_PROMPT 4 >>#Define CCHDEVICENAME 32 >>#Define CCHFORMNAME 32 >>#Define PD_RESULT_CANCEL 0 >>#Define PD_RESULT_PRINT 1 >>#Define PD_RESULT_APPLY 2 >> >> >> >>Declare Long GlobalAlloc In WIN32API Long uFlags, Long uBytes >>Declare Long GlobalLock In WIN32API Long Hmem >>Declare Long GlobalUnlock In WIN32API Long Hmem >>Declare Long GlobalFree In WIN32API Long Hmem >>Declare Integer PrintDlg In comdlg32.Dll Long lppd >>Declare Integer PrintDlgEx In comdlg32.Dll Long lppd >>Declare Long DeleteDC In WIN32API Long hdc >> >> >> >>Local hPRINTDLG, hPageRanges, hdc, hResult, nFlagsm, hResult >>Local hGDevMode, hGDevNames, nPageRange, hPageRange, lnAction >>Local lcDeviceName, lcFormName, hDevMode, hDevNames >> >>** Allocate memory for the PRINTDLGEX structure >> >>hPRINTDLG = GlobalAlloc(GPTR,SIZEOF_PRINTDLGEX) >>** Allocate memory for 10x PRINTPAGERANGE structures >>hPageRanges = GlobalAlloc(GPTR,SIZEOF_PRINTPAGERANGE*10) >>hdc = 0 >>hResult = 0 >>** Initialize the PRINTPAGERANGE structure >>nFlags = Bitor(PD_RETURNDC,PD_ALLPAGES) >>Sys(2600,hPageRanges,8,BinToC(1,"4rs")+BinToC(1,"4rs")) >>** Initialize the PRINTDLGEX structure >>Sys(2600,hPRINTDLG+ 0,4,BinToC(SIZEOF_PRINTDLGEX,"4rs")) && lStructSize >>Sys(2600,hPRINTDLG+ 4,4,BinToC(_vfp.HWnd,"4rs")) && hwndOwner >>Sys(2600,hPRINTDLG+20,4,BinToC(nFlags,"4rs")) && Flags >>Sys(2600,hPRINTDLG+32,4,BinToC(0,"4rs")) && nPageRanges >>Sys(2600,hPRINTDLG+36,4,BinToC(10,"4rs")) && nMaxPageRanges >>Sys(2600,hPRINTDLG+40,4,BinToC(hPageRanges,"4rs")) && lpPageRanges >>Sys(2600,hPRINTDLG+44,4,BinToC(1,"4rs")) && nMinPage >>Sys(2600,hPRINTDLG+48,4,BinToC(1000,"4rs")) && nMaxPage >>Sys(2600,hPRINTDLG+52,4,BinToC(1,"4rs")) && nCopies >>Sys(2600,hPRINTDLG+76,4,BinToC(START_PAGE_GENERAL,"4rs")) && nStartPage >> >>** Display the Print dialog >>hResult = PrintDlgEx(hPRINTDLG) >>** Pull updated values from PRINTDLGEX structure >>hGDevMode = CToBin(Sys(2600,hPRINTDLG+8,4),"4rs") >>hGDevNames = CToBin(Sys(2600,hPRINTDLG+12,4),"4rs") >>hdc = CToBin(Sys(2600,hPRINTDLG+16,4),"4rs") >>nFlags = CToBin(Sys(2600,hPRINTDLG+20,4),"4rs") >>lnAction = CToBin(Sys(2600,hPRINTDLG+80,4),"4rs") >>If hResult = 0 >>** Lock movable memory >> hDevMode = GlobalLock(hGDevMode) >> hDevNames = GlobalLock(hGDevNames) >>** Display Action taken by user >> Do Case >> Case lnAction = PD_RESULT_CANCEL >> ?"Action: CANCEL" >> Case lnAction = PD_RESULT_PRINT >> ?"Action: PRINT" >> Case lnAction = PD_RESULT_APPLY >> ?"Action: APPLY" >> Endcase >> >> >> >>** Display print range selection >> Do Case >> Case lnAction != PD_RESULT_PRINT >>** No Printing >> Case Bitand(nFlags,PD_SELECTION)=PD_SELECTION >> ?" Selection" >> Case Bitand(nFlags,PD_CURRENTPAGE)=PD_CURRENTPAGE >> ?" Current Page" >> Case Bitand(nFlags,PD_PAGENUMS)=PD_PAGENUMS >> ?" Page Ranges" >> nPageRanges = CToBin(Sys(2600,hPRINTDLG+32,4),"4rs") >> For nPageRange = 0 To nPageRanges-1 >> hPageRange = hPageRanges+(nPageRange*SIZEOF_PRINTPAGERANGE) >> nFrom = CToBin(Sys(2600,hPageRange,4),"4rs") >> nTo = CToBin(Sys(2600,hPageRange+4,4),"4rs") >> ?" From: "+Transform(nFrom)+" To: "+Transform(nTo) >> Endfor >> Otherwise >> ?" All Pages" >> Endcase >> >> >> >> >> >>** Display the DEVMODE structure, showing printing preferences >> >> If hDevMode <> 0 >> ?"DEVMODE:" >>** DEVMODE: http://msdn2.microsoft.com/en-us/library/ms535771.aspx >> lcDeviceName = Sys(2600,hDevMode+0,CCHDEVICENAME) >> lcDeviceName = " "+Left(lcDeviceName, At(0h00,lcDeviceName)-1) >> ?" Device Name: ", lcDeviceName >> ?" Orientation: ", CToBin(Sys(2600,hDevMode+44,2),"2rs") >> ?" Paper Size: ", CToBin(Sys(2600,hDevMode+46,2),"2rs") >> ?" Paper Length: ", CToBin(Sys(2600,hDevMode+48,2),"2rs") >> ?" Paper Width: ", CToBin(Sys(2600,hDevMode+50,2),"2rs") >> ?" Paper Scale: ", CToBin(Sys(2600,hDevMode+52,2),"2rs") >> ?" Paper Copies: ", CToBin(Sys(2600,hDevMode+54,2),"2rs") >> ?" Default Source: ",CToBin(Sys(2600,hDevMode+56,2),"2rs") >> ?" Print Qualilty: ",CToBin(Sys(2600,hDevMode+58,2),"2rs") >> ?" Color: ", CToBin(Sys(2600,hDevMode+60,2),"2rs") >> ?" Duplex: ", CToBin(Sys(2600,hDevMode+62,2),"2rs") >> ?" Y Resolution: ", CToBin(Sys(2600,hDevMode+64,2),"2rs") >> ?" TT Option: ", CToBin(Sys(2600,hDevMode+66,2),"2rs") >> ?" Collate: ", CToBin(Sys(2600,hDevMode+68,2),"2rs") >> lcFormName = Sys(2600,hDevMode+70,CCHFORMNAME) >> lcFormName = " "+Left(lcFormName, At(0h00,lcFormName)-1) >> ?" Form Name: ", lcFormName >> ?" LogPixels: ", CToBin(Sys(2600,hDevMode+102,2),"2rs") >> ?" BitsPerPixel: ", CToBin(Sys(2600,hDevMode+104,2),"2rs") >> ? >> Endif >> >>** Unlock movable memory >> GlobalUnlock(hGDevMode) >> GlobalUnlock(hGDevNames) >>Else >> ?"ERROR: "+Transform(hResult,"@0") >>Endif >>** Clean up allocated memory >>If hGDevMode <> 0 >> GlobalFree(hGDevMode) >>Endif >>If hGDevNames <> 0 >> GlobalFree(hGDevNames) >>Endif >>GlobalFree(hPageRanges) >>GlobalFree(hPRINTDLG) >>If hdc <> 0 >> DeleteDC(hdc) >>Endif >>Return>
?" Paper Copies: ", CToBin(Sys(2600,hPRINTDLG+52,4),"4rs")