Dim paperNumbers() As Integer, paperSizes() As POINTAPI lPaperCount = DeviceCapabilities(Printer.DeviceName, Printer.Port, DC_PAPERNAMES, ByVal vbNullString, 0) ReDim numPaper(1 To lPaperCount) sPaperNamesList = String(64 * lPaperCount, 0) ' Get paper names lPaperCount = DeviceCapabilities(Printer.DeviceName, Printer.Port, DC_PAPERNAMES, ByVal sPaperNamesList, 0) ' Get matching paper numbers ReDim paperNumbers(1 To lPaperCount) lPaperCount = DeviceCapabilities(Printer.DeviceName, Printer.Port, DC_PAPERS, paperNumbers(1), 0) ReDim paperSizes(1 To lPaperCount) lPaperCount = DeviceCapabilities(Printer.DeviceName, Printer.Port, DC_PAPERSIZE, paperSizes(1), 0) For lCounter = 1 To lPaperCount sNextString = Mid(sPaperNamesList, 64 * (lCounter - 1) + 1, 64) sNextString = Left(sNextString, InStr(1, sNextString, Chr(0)) - 1) List2.AddItem paperNumbers(lCounter) & vbTab _ & Format(paperSizes(lCounter).x / 254, "0.00") & " x " _ & Format(paperSizes(lCounter).y / 254, "0.00") _ & " inch" & vbTab & sNextString Next lCounter
The auto it version
Dim $numPaper[$lPaperCount[0]] $lPaperCount = DllCall("winspool.drv", "long", "DeviceCapabilitiesA", "str", $objPrinter.Name, "str", $objPrinter.PortName, "int", $DC_PAPERSIZE, "str", DllStructGetPtr($paperSizes), "ptr", 0) Dim $OutPut For $lCounter = 1 To $lPaperCount-1 $sNextString = StringMid($sPaperNamesList, 64 * ($lCounter - 1) + 1, 64) $sNextString = stringLeft($sNextString, StringInStr($sNextString, Chr(0),1,1,1) - 1) $OutPut &= $paperNumbers($lCounter) & @Tab $OutPut &= StringFormat("%10.2f",$paperSizes($lCounter).x / 254) & " x " $OutPut &= StringFormat("%10.2f",$paperSizes($lCounter).y / 254) & " inch" & @tab & $sNextString @CRLF Next
I don't het anything in my output.
$paperSizes is suppose to be and array of points (x,y) retrieved from the dllcall
Edited by oghenez, 04 April 2011 - 04:13 PM.




