|
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¸ü.
|
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD |
µoªí¤H |
¤º®e |
garfield Site Admin
µù¥U®É¶¡: 2003-01-30 ¤å³¹: 2157
²Ä 1 ¼Ó
|
µ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¤@©wn¬Û¦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¬°¥Dn³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¤@©wn¬Û¦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¤@©wn¬Û¦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¨ìµª®×. |
|
¦^³»ºÝ |
|
|
jepp
µù¥U®É¶¡: 2006-03-03 ¤å³¹: 30
²Ä 2 ¼Ó
|
µ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ªº? |
|
¦^³»ºÝ |
|
|
garfield Site Admin
µù¥U®É¶¡: 2003-01-30 ¤å³¹: 2157
²Ä 3 ¼Ó
|
µ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¨ìµª®×. |
|
¦^³»ºÝ |
|
|
kojanlai0823
µù¥U®É¶¡: 2011-12-02 ¤å³¹: 74
²Ä 4 ¼Ó
|
µoªí©ó: ¬P´Á¤ ¤Q¤G¤ë 02, 2011 3:25 pm ¤å³¹¥DÃD: |
|
|
³o¬qµ{¦¡§Ú¥Î¦bWIN7¤W..«ç»ò³£§ï¤£¹L¥h> < |
|
¦^³»ºÝ |
|
|
garfield Site Admin
µù¥U®É¶¡: 2003-01-30 ¤å³¹: 2157
²Ä 5 ¼Ó
|
|
¦^³»ºÝ |
|
|
kojanlai0823
µù¥U®É¶¡: 2011-12-02 ¤å³¹: 74
²Ä 6 ¼Ó
|
µ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¤À¨É¶Ü?? |
|
¦^³»ºÝ |
|
|
|
|
±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§@
|