VFP ·R¥ÎªÌªÀ°Ï ­º­¶ VFP ·R¥ÎªÌªÀ°Ï
¥»°Q½×°Ï¬° Visual Foxpro ·R¥ÎªÌ¸gÅç¥æ¬yªº¦a¤è, ½Ð¦h¦h§Q¥Î"·j´M"ªº¥\¯à, ¥ý¬d¬Ý¬Ý¦³µL«e¨Ò¥i´`, ¦pªGÁÙ¦³¤£À´ªº¦Aµo°Ý. ³¡¥÷¥DÃD¦³ªþ¥[ÀÉ®×, ¶·¥ýµù¥U¦¨¬°ªÀ°Ï©~¥Á¤~¥i¥H¤U¸ü.
 
 ±`¨£°ÝÃD±`¨£°ÝÃD   ·j´M·j´M   ·|­û¦Cªí·|­û¦Cªí   ·|­û¸s²Õ·|­û¸s²Õ   ·|­ûµù¥U·|­ûµù¥U 
 ­Ó¤H¸ê®Æ­Ó¤H¸ê®Æ   µn¤JÀˬd±zªº¨p¤H°T®§µn¤JÀˬd±zªº¨p¤H°T®§   µn¤Jµn¤J

Àˬd¨Ã¦Û°Ê«Ø¥ß¦Lªí¾÷¦Û©w¯È±i¤Ø¤o OO

 
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD  
µoªí¤H ¤º®e
garfield
Site Admin


µù¥U®É¶¡: 2003-01-30
¤å³¹: 2157


²Ä 1 ¼Ó

µoªíµoªí©ó: ¬P´Á¤T ¥|¤ë 19, 2006 11:46 am    ¤å³¹¥DÃD: Àˬd¨Ã¦Û°Ê«Ø¥ß¦Lªí¾÷¦Û©w¯È±i¤Ø¤o OO ¤Þ¨¥¦^ÂÐ

¦bºô¸ô¤¤§ä¨ìªº¸ê®Æ, ı±o­ì©lµ{¦¡¬Ý°_¨Ó«Ü½ÆÂø, ¹ï©óªì¾ÇªÌ¦Ó¨¥¤ÓÃø²z¸Ñ, ±N¥¦¼g¦¨°Æµ{¦¡, ª½±µ®³¨Ó¥Î´N¦n¤F.
§Æ±æ¯àÀ°§U¨ì¤@¨Ç¤H ^^


¥N½X:

*****************************************************
****  ¦Lªí¾÷¯È±i±±¨î,  ¦Û©w¯È±i, ¥i?#93;©w¯È±i¤j¤p¤ÎÃä¬É
* ½d¨Ò
* oprn = createobject('prncontrol')
* ? oprn.chkpaper('¤¤¤@¤M' )      &&--¦pªG¦³«Ø¥ß"¤¤¤@¤M"³o­Ó¤Ø¤o¦WºÙ´N¶Ç¦^ .T. , ¤Ø¤o¦b .papersizewidth ¤Î .papersizeheight , ¥H­^¦T¬°¥D
*¤j¤p¼g¤@©w­n¬Û¦P
* oprn.addpaper('¤¤¤@¤M',8.5,5.5 )      &&--¹w©w«Ø¥ßªº¤Ø¤o¦WºÙ,­^¦T¼e,­^¦Tªø
* oprn.addpaper('12inch',8.5,12,1,2,3,4)      &&--1,2,3,4 ¦U¬°¥ª¥k¤W¤U
* oprn.delpaper('¤¤¤@¤M' )      &&--¹w©w«Ø¥ßªº¤Ø¤o¦WºÙ,­^¦T¼e,­^¦Tªø
* ¥i¥H¥Î regedit ¨ì localmachine\SYSTEM\CurrentControlSet\Control\Print\Forms ¬Ý¨ì·s¼Wªº¸ê®Æ

Define Class prncontrol As Custom
* ÂI°}¦¡¦Lªí¾÷ªº³]­p¥»¨Ó´N¬O¨Ì­^¦T¬°¥D­n³W®æ
* ooµæ³¾§ï¼gªÌ: garfield
   papersizewidth = 8.5
   papersizeheight = 5.5
   inchtomm = 25.4
   
   oheap = ''
   hPrinter=0
   nSize=0
   aFI1=Space(32)
   BytesNeeded=0
   NumForms=0
   AddForm=0

   DIMENSION prnlist[1,2]
   DIMENSION paperlist[1]
   lcprinter = ""
   lcport    = ""

   Procedure Init
      Declare Integer OpenPrinter In WinSpool.Drv As WS_OpenPrinter ;
         String pPrinterName, ;
         Integer @phPrinter, ;
         String pDefault

      Declare Integer DocumentProperties In WinSpool.Drv ;
         Integer, ;
         Integer, ;
         String, ;
         String, ;
         String, ;
         Integer

      Declare Integer ClosePrinter In WinSpool.Drv As WS_ClosePrinter ;
         Integer hPrinter

      Declare Integer EnumForms In WinSpool.Drv ;
         Integer, ;
         Integer, ;
         String @, ;
         Integer , ;
         Integer @, ;
         Integer @

      Declare Integer AddForm In WinSpool.Drv ;
         Integer, ;
         Integer, ;
         String

      Declare Integer DeleteForm In WinSpool.Drv ;
         Integer, ;
         String

      Declare Long CreateDC In gdi32.Dll ;
         STRING @cDriver, ;
         STRING @cDevice, ;
         STRING cOutput, ;
         STRING cInitData

      Declare Long DeleteDC In gdi32.Dll ;

      Declare Long ResetDC In gdi32.Dll ;
         Integer, ;
         String

      Declare Integer lstrcpy In kernel32.Dll ;
         STRING @lpString1, Integer lpString2

      Declare Integer GetForm In WinSpool.drv ;
         INTEGER,;
         String, ;
         INTEGER,;
         String, ;
         INTEGER,;
         INTEGER

      Declare Integer SetForm In WinSpool.drv ;
         INTEGER,;
         String,;
         Integer,;
         String

      APRINTERS(this.prnlist)
      this.lcprinter = this.prnlist[1,1]
      
      this.oheap = Createobj("Heap")

      this.paperdata( )

   ENDPROC
   PROCEDURE paperdata
*susp
      mhPrinter=0
      mNumForms=0
      mBytesNeeded=0
      If WS_OpenPrinter(this.lcprinter , @mhPrinter, 0) <> 0
         NS=REPLICATE(CHR(0), 32)
         RetVal = EnumForms(mhPrinter, 1, @NS, 0, @mBytesNeeded, @mNumForms)
*? RetVal
         bc=mBytesNeeded
*? 'bc=',bc         
         mTemp=REPLICATE(CHR(0), bc)
         RetVal = EnumForms(mhPrinter, 1, @mTemp, bc , @mBytesNeeded, @mNumForms)
*? RetVal
         Temp = REPLICATE(CHR(0), bc)

         Declare RtlMoveMemory IN kernel32 As CopyMemory;
            STRING @ Destination,;
            STRING Source,;
            INTEGER nLength

         CopyMemory(@Temp,mTemp,bc)

         DIMENSION this.paperlist[mNumForms,3]

*wait
         For I = 1 To mNumForms
            sn = (I - 1) * 32 + 1
            sn = substr(Temp,sn,32)
            sTemp = Space(512)
            ss = substr(sn,5,4)
            x = 0
            = lstrcpy(@sTemp, this.LONGTONUM(ss))
*? i,Chr(0)$sTemp,ss,this.LONGTONUM(ss),stemp            
            If !Chr(0)$sTemp
               PtrCtoVbString = ""
            Else
               this.paperlist[i,1] = alltrim(Left(sTemp, at(Chr(0),sTemp)-1))
               this.paperlist[i,2] = this.LONGTONUM(substr(sn, 9,4))/1000      &&-- mm
               this.paperlist[i,3] = this.LONGTONUM(substr(sn,13,4))/1000      &&-- mm
            Endif
         Next

      Else
         Wait window "µLªk¨ú±o¦Lªí¾÷¯È±i¸ê°T"
      Endif

      =WS_ClosePrinter(mhPrinter)

   ENDPROC
   PROCEDURE longtonum
      Lparameter TCLONG
      Declare RtlMoveMemory IN WIN32API AS RtlCopyLong ;
         INTEGER @ DestNum, ;
         STRING @ pVoidSource, ;
         INTEGER nLength
      Local NNUM
      NNUM = 0
      =RTLCOPYLONG(@NNUM, TCLONG, 4)
      Return NNUM
   ENDPROC
   Procedure NumtoDword
      Lparameter TNNUM
      Declare RtlMoveMemory IN WIN32API AS RtlCopyLong ;
         STRING @pDestString, ;
         INTEGER @pVoidSource, ;
         INTEGER nLength
      Local CSTRING
      CSTRING = SPACE(4)
      =RTLCOPYLONG(@CSTRING, BITOR(TNNUM,0), 4)
      Return CSTRING
   ENDPROC

   Procedure addpaper
      LPARAMETERS mname , mwidth , mheight, mleft , mright , mtop, mbotton
      IF TYPE('mleft')#'N'
         mleft=0
      ENDIF
      IF TYPE('mright')#'N'
         mright=0
      ENDIF
      IF TYPE('mtop')#'N'
         mtop = 0
      ENDIF
      IF TYPE('mbotton')#'N'
         mbotton=0
      endif
      LOCAL mret
      mret = .f.
      mhPrinter = 0
      mBytesNeeded=0
      If EMPTY(mname) OR mwidth<=0 OR mheight<=0
         WAIT windows '¯È±i¸ê®Æ¦³°ÝÃD, µLªk«Ø¥ß¯È±i¸ê®Æ' nowait
      else
         If WS_OpenPrinter(this.lcprinter, @mhPrinter, 0) <> 0
            FormName=alltrim(mname)+Chr(0)+Chr(0)
            NSTRINGBASE = this.OHEAP.ALLOCBLOB(FormName)
            RetVal = AddForm(mhPrinter,1,this.NUMTODWORD(0)+this.NUMTODWORD(NSTRINGBASE)+;
               this.NUMTODWORD(mwidth*this.inchtomm*1000)+this.NUMTODWORD(mheight*this.inchtomm*1000)+;
               this.NUMTODWORD(mleft*this.inchtomm*1000)+this.NUMTODWORD(mtop*this.inchtomm*1000)+;
               this.NUMTODWORD((mwidth-mright)*this.inchtomm*1000)+this.NUMTODWORD((mheight-mbotton)*this.inchtomm*1000))

**//               this.NUMTODWORD(mwidth*this.inchtomm*1000)+this.NUMTODWORD(mheight*this.inchtomm*1000)
            =WS_ClosePrinter(mhPrinter)
            If RetVal = 0 Then
               Messagebox("µLªk?#93;©w¯È±i !")
            ELSE
               this.paperdata()
               *¸g¹ê´ú¸gÅç, ¶·°õ¦æ¨â¦¸¤~¯à¥¿±`§ì¥Xpaper¸ê®Æ
               this.paperdata()
               mret = .t.   
            Endif
         Else
            Wait window "µLªk¨ú±o¦Lªí¾÷¯È±i¸ê°T"
         Endif
      ENDIF
      RETURN mret
   Endproc

   Procedure delpaper
      LPARAMETERS mname
      *¤j¤p¼g¤@©w­n¬Û¦P
      LOCAL mret
      mret = .f.
      mhPrinter = 0
      mBytesNeeded=0
      If WS_OpenPrinter(this.lcprinter, @mhPrinter, 0) <> 0
         papername= mname
         RetVal = DeleteForm(mhPrinter,papername)
         =WS_ClosePrinter(mhPrinter)
         If RetVal = 0 Then
            Messagebox("µLªk§R°£¯È±i¸ê®Æ !")
         Else
            this.paperdata()
         Endif

      Else
         Wait window "µLªk¨ú±o¦Lªí¾÷¯È±i¸ê°T"
      Endif
      RETURN mret
   Endproc

   Procedure chkpaper
      LPARAMETERS mname
      *¤j¤p¼g¤@©w­n¬Û¦P
      LOCAL i, mret
      i = ASCAN( this.paperlist , mname)
      IF i>0
         mret = .t.
         i = (i+2) /3
         this.papersizewidth= this.paperlist[i,2]/ this.inchtomm
         this.papersizeheight= this.paperlist[i,3]/ this.inchtomm
      ELSE
         mret = .f.
         this.papersizewidth= 0
         this.papersizeheight= 0
      endif
      RETURN mret
   Endproc

   Procedure Destroy
   Endproc
Enddefine

**************
Define Class HEAP As Custom
   Protected INHANDLE, INNUMALLOCSACTIVE,IAALLOCS[1,3]
   INHANDLE = Null
   INNUMALLOCSACTIVE = 0
   IAALLOCS = Null
   Name = "heap"

   Procedure ALLOC
   Lparameter nSize
   Declare Integer HeapAlloc In WIN32API As HAlloc Integer hHeap, Integer dwFlags, Integer dwBytes
   Declare Integer HeapSize In WIN32API As HSize Integer hHeap, Integer dwFlags, Integer lpcMem
   Local NPTR
   With This
      NPTR = HAlloc(.INHANDLE, 0, @nSize)
      If NPTR # 0
         .INNUMALLOCSACTIVE = .INNUMALLOCSACTIVE + 1
         Dimension .IAALLOCS[.inNumAllocsActive,3]
         .IAALLOCS[.inNumAllocsActive,1] = NPTR
         .IAALLOCS[.inNumAllocsActive,2] = HSize(.INHANDLE, 0, NPTR)
         .IAALLOCS[.inNumAllocsActive,3] = .T.
      Else
         NPTR = Null
      Endif
   Endwith
   Return NPTR
   Endproc

   Function ALLOCBLOB
   Lparameter CBSTRINGTOCOPY
   Local NALLOCPTR
   With This
      NALLOCPTR = .ALLOC(Len(CBSTRINGTOCOPY))
      If ! Isnull(NALLOCPTR)
         .COPYTO(NALLOCPTR,CBSTRINGTOCOPY)
      Endif
   Endwith
   Return NALLOCPTR
   Endfunc

   Function ALLOCSTRING
   Lparameter CSTRING
   Return This.ALLOCBLOB(CSTRING + Chr(0))
   Endfunc

   Function ALLOCINITAS
   Lparameter NSIZEOFBUFFER, NBYTEVALUE
   If Type("nByteValue") # "N" Or ! Between(NBYTEVALUE,0,255)
      NBYTEVALUE = 0
   Endif
   Return This.ALLOCBLOB(Replicate(Chr(NBYTEVALUE),NSIZEOFBUFFER))
   Endfunc

   Procedure DEALLOC
   Lparameter NPTR
   Declare Integer HeapFree In WIN32API As HFree ;
      INTEGER hHeap, ;
      INTEGER dwFlags, ;
      INTEGER lpMem
   Local NCTR
   NCTR = Null
   With This
      NCTR = .FINDALLOCID(NPTR)
      If ! Isnull(NCTR)
         =HFree(.INHANDLE, 0, NPTR)
         .IAALLOCS[nCtr,3] = .F.
      Endif
   Endwith
   Return ! Isnull(NCTR)
   Endproc

   Procedure COPYTO
   Lparameter NPTR, CSOURCE
   Declare RtlMoveMemory In WIN32API As RtlCopy ;
      INTEGER nDestBuffer, ;
      STRING @pVoidSource, ;
      INTEGER nLength
   Local NCTR
   NCTR = Null
   If Type("nPtr") = "N" And Type("cSource") $ "CM" ;
         AND ! (Isnull(NPTR) Or Isnull(CSOURCE))
      With This
         NCTR = .FINDALLOCID(NPTR)
         If ! Isnull(NCTR)
            =RtlCopy((.IAALLOCS[nCtr,1]), ;
               CSOURCE, ;
               MIN(Len(CSOURCE),.IAALLOCS[nCtr,2]))
         Endif
      Endwith
   Endif
   Return ! Isnull(NCTR)
   Endproc

   Procedure COPYFROM
   Lparameter NPTR
   Declare RtlMoveMemory In WIN32API As RtlCopy ;
      STRING @DestBuffer, ;
      INTEGER pVoidSource, ;
      INTEGER nLength
   Local NCTR, UBUFFER
   UBUFFER = Null
   NCTR = Null
   If Type("nPtr") = "N" And ! Isnull(NPTR)
      With This
         NCTR = .FINDALLOCID(NPTR)
         If ! Isnull(NCTR)
            UBUFFER = Repl(Chr(0),.IAALLOCS[nCtr,2])
            =RtlCopy(@UBUFFER, ;
               (.IAALLOCS[nCtr,1]), ;
               (.IAALLOCS[nCtr,2]))
         Endif
      Endwith
   Endif
   Return UBUFFER
   Endproc

   Protected Function FINDALLOCID
      Lparameter NPTR
      Local NCTR
      With This
         For NCTR = 1 To .INNUMALLOCSACTIVE
            If .IAALLOCS[nCtr,1] = NPTR And .IAALLOCS[nCtr,3]
               Exit
            Endif
         Endfor
         Return Iif(NCTR <= .INNUMALLOCSACTIVE,NCTR,Null)
      Endwith
      Endproc

   Procedure SIZEOFBLOCK
   Lparameters NPTR
   Local NCTR, NSIZEOFBLOCK
   NSIZEOFBLOCK = Null
   With This
      NCTR = .FINDALLOCID(NPTR)
      Return Iif(Isnull(NCTR),Null,.IAALLOCS[nCtr,2])
   Endwith
   Endproc

   Procedure Destroy
   Declare HeapDestroy In WIN32API As HDestroy ;
      INTEGER hHeap

   Local NCTR
   With This
      For NCTR = 1 To .INNUMALLOCSACTIVE
         If .IAALLOCS[nCtr,3]
            .DEALLOC(.IAALLOCS[nCtr,1])
         Endif
      Endfor
      HDestroy[.inHandle]
   Endwith
   DoDefault()
   Endproc

   Procedure Init
   Declare Integer HeapCreate In WIN32API As HCreate ;
      INTEGER dwOptions, ;
      INTEGER dwInitialSize, ;
      INTEGER dwMaxSize
   #Define SWAPFILEPAGESIZE  4096
   #Define BLOCKALLOCSIZE    2 * SWAPFILEPAGESIZE
   With This
      .INHANDLE = HCreate(0, BLOCKALLOCSIZE, 0)
      Dimension .IAALLOCS[1,3]
      .IAALLOCS[1,1] = 0
      .IAALLOCS[1,2] = 0
      .IAALLOCS[1,3] = .F.
      .INNUMALLOCSACTIVE = 0
   Endwith
   Return (This.INHANDLE # 0)
   Endproc

ENDDEFINE

_________________
§Q¥Î>>·j´M<<ªº¥\¯à·|¤ñ°ÝªºÁÙ­n§Ö±o¨ìµª®×.
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó
jepp



µù¥U®É¶¡: 2006-03-03
¤å³¹: 30


²Ä 2 ¼Ó

µoªíµoªí©ó: ¬P´Á¤» ¥|¤ë 29, 2006 5:49 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

½Ð°Ý¤@¤U¡A§Ú§âµ{¦¡½X¶K¨ì .PRG °õ¦æ¸Õ¤F¤@¤U¡A
¬°¤°»ò¥u·|¥X²{ "µLªk?#93;©w¯È±i !" ¡C¬O§_¦³¤°»ò²Ó¸`¶·­nª`·Nªº?
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
garfield
Site Admin


µù¥U®É¶¡: 2003-01-30
¤å³¹: 2157


²Ä 3 ¼Ó

µoªíµoªí©ó: ¬P´Á¤» ¥|¤ë 29, 2006 10:16 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

¤£¥i­«½Æ°õ¦æ,
À³¸Ó¥Î chkpaper Àˬd¬O§_¤w¸g«Ø¥ß¹L¯È±i¤Ø¤o
Ãä¬É¤£¥i³]©w¤Ó¤j.
¥i¯à¤£¾A¥Î©ó win98 / winme (¨S¸Õ¹L)

_________________
§Q¥Î>>·j´M<<ªº¥\¯à·|¤ñ°ÝªºÁÙ­n§Ö±o¨ìµª®×.
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó
kojanlai0823



µù¥U®É¶¡: 2011-12-02
¤å³¹: 74


²Ä 4 ¼Ó

µoªíµoªí©ó: ¬P´Á¤­ ¤Q¤G¤ë 02, 2011 3:25 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

³o¬qµ{¦¡§Ú¥Î¦bWIN7¤W..«ç»ò³£§ï¤£¹L¥h> <
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
garfield
Site Admin


µù¥U®É¶¡: 2003-01-30
¤å³¹: 2157


²Ä 5 ¼Ó

µoªíµoªí©ó: ¬P´Á¤­ ¤Q¤G¤ë 02, 2011 6:36 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

¦pªG¤£¬OÅX°Êµ{¦¡ªº°ÝÃD,
¥i¥ý°Ñ¦Ò http://vfp.sunyear.com.tw/viewtopic.php?t=5735

_________________
§Q¥Î>>·j´M<<ªº¥\¯à·|¤ñ°ÝªºÁÙ­n§Ö±o¨ìµª®×.
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó
kojanlai0823



µù¥U®É¶¡: 2011-12-02
¤å³¹: 74


²Ä 6 ¼Ó

µoªíµoªí©ó: ¬P´Á¤T ¤Q¤G¤ë 28, 2011 5:58 pm    ¤å³¹¥DÃD: ¦@¥Î¦Lªí¾÷LPT ¤Þ¨¥¦^ÂÐ

³o­ÓAPI¥i¥H¼g¤J¯È±i®æ¦¡..
¦ý¦pªG¬O¤À¨É¥X¨Óªº¦Lªí¾÷«hµLªk§ïÅܯȱi¤j¤p..
³oµÛ¹êÅý§ÚÀY¤j..
ÁÙ¬O¤À¨É¥Xªº¦Lªí¾÷»Ý°µ¤°»ò¼ËªºÅv­­¤À¨É¶Ü??
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
±q¤§«eªº¤å³¹¶}©lÅã¥Ü:   
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï ©Ò¦³ªº®É¶¡§¡¬° ¥x¥_®É¶¡ (GMT + 8 ¤p®É)
²Ä1­¶(¦@1­¶)

 
«e©¹:  
±z µLªk ¦b³o­Óª©­±µoªí¤å³¹
±z µLªk ¦b³o­Óª©­±¦^ÂФ峹
±z µLªk ¦b³o­Óª©­±½s¿è¤å³¹
±z µLªk ¦b³o­Óª©­±§R°£¤å³¹
±z µLªk ¦b³o­Óª©­±¶i¦æ§ë²¼
±z µLªk ¦b³o­Óª©­±ªþ¥[ÀÉ®×
±z µLªk ¦b³o­Óª©­±¤U¸üÀÉ®×


Powered by phpBB © 2001, 2005 phpBB Group
¥¿Å餤¤å»y¨t¥Ñ phpbb-tw ºûÅ@»s§@