Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Truncated field in CR report
Message
 
 
To
16/03/2004 07:12:10
General information
Forum:
Visual FoxPro
Category:
Crystal Reports
Miscellaneous
Thread ID:
00886631
Message ID:
00886695
Views:
15
Virusim,

CR is difficult.
Do you use selectPrinter method ?

TRy this for find the name of driver.
CLEAR ALL
LOCAL oForm

DO DeclareApiFunction

PRIVATE hWindow, cPrinter, cDriver, cPort, hPrinter, nBufsize, cDevmode
hWindow = GetActiveWindow()
STORE "" TO cPrinter, cDriver, cPort , cDevmode
STORE 0 TO hPrinter, nBufsize

oForm = CREATEOBJECT("form1")

oForm.SHOW()

**************************************************
*-- Class:        form1 (c:\cdbk70\amline\libs\atest.vcx)
*-- ParentClass:  form
*-- BaseClass:    form
*-- Time Stamp:   03/16/04 12:48:13 PM
*
DEFINE CLASS form1 AS FORM


  DOCREATE = .T.
  CAPTION = "Form1"
  WINDOWTYPE = 1
  NAME = "Form1"


  ADD OBJECT command1 AS COMMANDBUTTON WITH ;
    TOP = 12, ;
    LEFT = 264, ;
    HEIGHT = 27, ;
    WIDTH = 84, ;
    CAPTION = "PROPERTY", ;
    NAME = "CMDSETUP"


  ADD OBJECT listprinter AS LISTBOX WITH ;
    HEIGHT = 170, ;
    LEFT = 24, ;
    TOP = 12, ;
    WIDTH = 216, ;
    NAME = "ListPrinter"


  ADD OBJECT cmdok AS COMMANDBUTTON WITH ;
    TOP = 204, ;
    LEFT = 276, ;
    HEIGHT = 27, ;
    WIDTH = 84, ;
    CAPTION = "OK", ;
    NAME = "CMDOK"


  PROCEDURE INIT
    *--Create an array with all windows printers

    LOCAL m.numOfPrinters,;
      printerName,;
      m.i,;
      cNameDefaultPrinter,;
      nPrintDefault

    m.numOfPrinters = APRINTERS(printerList)
    cNameDefaultPrinter = LOWER( SET("Printer" , 2 ) )
    IF m.numOfPrinters  > 0
      THISFORM.ADDPROPERTY('alist(1)')

      DIMENSION THISFORM.alist[ m.numOfPrinters ]
      THIS.listprinter.ROWSOURCETYPE = 5
      THIS.listprinter.ROWSOURCE ='Thisform.alist'
      nPrintDefault = 0

      FOR m.i = 1 TO m.numOfPrinters && ALEN( printerList , 1 )*

        m.printerName = " " + printerList[m.i, 1]
        IF  cNameDefaultPrinter $ LOWER( m.printerName )
          nPrintDefault = m.i
        ENDIF

        THIS.alist[m.i] = m.printerName

      NEXT

    ENDIF

    *-- Printer defaut
    IF nPrintDefault > 0
      THIS.listprinter.LISTINDEX = nPrintDefault
    ENDIF
  ENDPROC


  PROCEDURE CMDSETUP.CLICK
    LOCAL lnretval

    cPrinter = THISFORM.cprintername()
    IF THISFORM.oPenPrinter()
      lnretval =DocumentProperties(hWindow, hPrinter, cPrinter,;
        @cDevmode, 0, DM_IN_BUFFER+DM_OUT_BUFFER+DM_IN_PROMPT )
    ENDIF

  ENDPROC


  PROCEDURE cmdok.CLICK
    *-- All settings are lost !
    *-- WHY ?

    DO OpenDialog
  ENDPROC
  *-- Return the name of the printer.
  PROCEDURE cprintername
    RETURN  ALLTRIM( Thisform.alist[ Thisform.listprinter.ListIndex ] )
  ENDPROC

  PROCEDURE oPenPrinter
    hPrinter = 0
    = oPenPrinter( cPrinter , @hPrinter , 0 )
    IF hPrinter = 0
      = MESSAGEB("Impossible d''initier l'imprimante . ", 48, "Error" )
      RETURN .F.
    ENDIF

    nBufsize = DocumentProperties(hWindow, hPrinter, cPrinter,0,0,0)
    cDevmode = REPLI(CHR(0), nBufsize)
  ENDPROC


ENDDEFINE
*
*-- EndDefine: form1
**************************************************

*-- API FUNCTION

PROCEDURE OpenDialog
  * showing printer settings dialog
  LOCAL lnretval
  lnretval = DocumentProperties(hWindow, hPrinter, cPrinter,;
    @cDevmode, @cDevmode, DM_IN_PROMPT+DM_IN_BUFFER+DM_OUT_BUFFER)
  RETURN lnretval
ENDPROC

PROCEDURE GetPrnName
  * retrieves default printer name from the Registry
  LOCAL lcBuffer, lcPrinter, lcDriver, lcPort

  lcBuffer = REPLI(CHR(0), 120)
  = GetProfileString("Windows", "Device", ",,,",;
    @lcBuffer, LEN(lcBuffer))

  lcBuffer = STRTRAN(lcBuffer, CHR(0), "")

  DIMEN arrPos[3]
  arrPos[1] = AT(",", lcBuffer, 1)
  arrPos[2] = AT(",", lcBuffer, 2)
  arrPos[3] = LEN(lcBuffer)

  cPrinter = SUBSTR(lcBuffer, 1, arrPos[1]-1)
  cDriver = SUBSTR(lcBuffer, arrPos[1]+1, arrPos[2]-arrPos[1]-1)
  cPort = SUBSTR(lcBuffer, arrPos[2]+1, arrPos[3]-arrPos[2])
  RELEASE arrPos
ENDPROC

FUNCTION buf2dword (lcBuffer)
  RETURN ASC(SUBSTR(lcBuffer, 1,1)) + ;
    BITLSHIFT(ASC(SUBSTR(lcBuffer, 2,1)),  8) +;
    BITLSHIFT(ASC(SUBSTR(lcBuffer, 3,1)), 16) +;
    BITLSHIFT(ASC(SUBSTR(lcBuffer, 4,1)), 24)
ENDFUNC

FUNCTION buf2word (lcBuffer)
  RETURN ASC(SUBSTR(lcBuffer, 1,1)) + ;
    ASC(SUBSTR(lcBuffer, 2,1)) * 256
ENDFUNC

FUNCTION num2dword (lnValue)
  #DEFINE m0       256
  #DEFINE m1     65536
  #DEFINE m2  16777216
  LOCAL b0, b1, b2, b3
  b3 = INT(lnValue/m2)
  b2 = INT((lnValue - b3*m2)/m1)
  b1 = INT((lnValue - b3*m2 - b2*m1)/m0)
  b0 = MOD(lnValue, m0)
  RETURN CHR(b0)+CHR(b1)+CHR(b2)+CHR(b3)
ENDFUNC

FUNCTION num2word(lnValue)
  RETURN CHR(MOD(m.lnValue,256)) + CHR(INT(m.lnValue/256))
ENDFUN

PROCEDURE DeclareApiFunction
  *-- UT : The SetDefaultPrinter Win API function is only available in WIn2K and later.
  *-- The SetDefaultPrinter WSH method is supported under Win98 and later.
  *-- Besides that there shouldn't be any difference between them.

  DECLARE INTEGER OpenPrinter IN winspool.drv;
    STRING pPrinterName, INTEGER @phPrinter, INTEGER pDefault

  DECLARE INTEGER GetProfileString IN kernel32;
    STRING lpApp, STRING lpKey, STRING lpDefault,;
    STRING @lpReturnedString, INTEGER nSize

  DECLARE INTEGER ClosePrinter IN winspool.drv INTEGER hPrinter
  DECLARE INTEGER GetActiveWindow IN user32
  DECLARE INTEGER DeleteDC IN gdi32 INTEGER hdc

  DECLARE INTEGER DocumentProperties IN winspool.drv;
    INTEGER HWND, INTEGER hPrinter, STRING pDeviceName,;
    STRING @pDevModeOutput, STRING @pDevModeInput, INTEGER fMode

ENDPROC
Previous
Reply
Map
View

Click here to load this message in the networking platform