* API declarations for Getting Paper Size >DECLARE INTEGER StartPage IN GDI32 INTEGER hdc >DECLARE INTEGER EndPage IN GDI32 INTEGER hdc >DECLARE INTEGER EndDoc IN GDI32 INTEGER hdc >DECLARE INTEGER StartDoc IN GDI32 INTEGER hdc, STRING lpdi > >DECLARE INTEGER OpenPrinter IN winspool.drv STRING @pPrinterName, INTEGER @phPrinter, INTEGER pDefault >DECLARE INTEGER ClosePrinter IN winspool.drv INTEGER hPrinter >DECLARE LONG EnumForms IN winspool.drv AS EnumForms LONG hPrinter, LONG Level, LONG pForm, LONG cbBuf, LONG @pcbNeeded, LONG @ pcReturned >DECLARE INTEGER HeapCreate IN WIN32API INTEGER dwOptions, INTEGER dwInitialSize, INTEGER dwMaxSize >DECLARE INTEGER HeapAlloc IN WIN32API INTEGER hHeap, INTEGER dwFlags, INTEGER dwBytes >DECLARE INTEGER HeapFree IN WIN32API INTEGER hHeap, INTEGER dwFlags, INTEGER lpMem >DECLARE HeapDestroy IN WIN32API INTEGER hHeap > > >LOCAL lhHeap >* Allocate a heap >m.lhHeap = HeapCreate(0, 4096*10, 0) > >* Enumerate forms for default VFP printer >LOCAL lhPrinter, lnNeeded, lnBuffer > >* Open a printer >m.lhPrinter = 0 >m.lnResult = OpenPrinter(@tcPrinterName, @lhPrinter, 0) > >* Get the size of the buffer required to fit all forms in lnNeeded >m.lnNeeded = 0 >=EnumForms(m.lhPrinter, 1, 0, 0, @lnNeeded, 0) > >* Get the list of forms >m.lnBuffer = HeapAlloc(m.lhHeap, 0, m.lnNeeded) >=EnumForms(m.lhPrinter, 1, m.lnBuffer, @lnNeeded, @lnNeeded, 0) > >* Get the information for the desired Paper ID obtained from PRTINFO(2) >* The form attributes are stored in in thousandths of millimeters >m.lnPointer = m.lnBuffer + (PRTINFO(2) - 1) * 32 >m.lnPageWidth = CTOBIN(SYS(2600, (m.lnPointer+ 8), 4),"4RS") / 100 >m.lnPageHeight = CTOBIN(SYS(2600, (m.lnPointer+12), 4),"4RS") / 100 > >= HeapFree(m.lhHeap, 0, m.lnBuffer ) >= ClosePrinter(m.lhPrinter) > >* Clear the Heap >IF m.lhHeap <> 0 > HeapDestroy(m.lhHeap) >ENDIF > >* Adjust page Width and Height >m.lnPageWidth = (m.lnPageWidth / 100 / 2.54) * m.lnHorRes >m.lnPageHeight = (m.lnPageHeight / 100 / 2.54) * m.lnVertRes > >? lnPageWidth, lnPageHeight>