印表機中斷 int 17H 有哪些參數 |
|
whyzn
中階會員 發表:46 回覆:149 積分:54 註冊:2002-06-16 發送簡訊給我 |
|
aip999
初階會員 發表:10 回覆:63 積分:44 註冊:2002-03-29 發送簡訊給我 |
|
whyzn
中階會員 發表:46 回覆:149 積分:54 註冊:2002-06-16 發送簡訊給我 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
你要寫發票格式嗎?或是類似通訊標籤的非正規格式報表嗎?
進紙,退紙‧‧‧ 可以使用winapi但是你須限制某長度並會浪費一刀空間
因為我也沒找到退紙部份 如epson的印表機會退紙是直接做在硬體上面
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
whyzn
中階會員 發表:46 回覆:149 積分:54 註冊:2002-06-16 發送簡訊給我 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
此為轉載忘記那裡看到的 參考看看也許你找就知道了 一般來說,進入Window時代後,VB的印表可透過Printer物件,當然,更多人是使用水晶報表或Data Report,但是後面這兩者,可能沒有辦法符合所有的需求,這時可能就會透過Printer物件來做。但是Printer物件基本上是以圖形的方式來印表,而我們的報表如果是單純文字,那實在是大才小用。我們仍可以利用Dos年代Open LPT1的方式來印表,好處在於快,而且還可以做Message Printer來用(以Line為單位印表而非以Page為單位)。(Printer物件是透過印表機Driver來印表的,而Open LPT1等方式,是直接把文字送到LPT1,而LPT1上接的Printer,就收至我們送出的Code) 重點在於要Open那個東西才是代表Printer,如果是Local Printer,那就是LPT1/LPT2等,如果是網路印表機,那可選取該印表機,按右鍵後選內容,之後選"詳細資料"
的Tab,其中有一個欄位是"列印到下面的連接埠",如 \NF400fuji ,這便是我們要的啦。 不過這裡要注意的是,只能用中文印表機,因為中文印表機才內含有中文字型,而且該印表機要有支援標準的ESC/P指令。而我以下的程式是適用於Big5碼的方式,要改用其他方式者,要自行改程式。有些可能連印表機的設定也得改。另外,要送一行印一行,似乎得在印表機上做設定,而沒有辦法用ESC/P 指令來做。 例如:
Dim pno as Integer
pno = OpenPrinter("LPT1") `要在Lpt1的印表機上印表
Call PntEnlargeChar(pno, True) `設定2*2大小印出
Call DoPrint("這是一個Testing",pno) `印表
Call FormFeed(pno) `跳頁
Call ClosePrinter(pno) `關掉
Option Explicit
`開啟Printer並傳回PrinterNO
`參數2代表是否送出起始字串,如果您不是要印到印表機,而是印到某個Text File
`則傳入True,如果是印到印表機,則可以不傳或傳False
Public Function OpenPrinter(ByVal PnterName As String, Optional ByVal ToFile) As Integer
Dim intPrinter As Integer, mstrPrinter As String
Dim InitStr As String, toPrinter As Boolean
intPrinter = FreeFile
mstrPrinter = PnterName
OpenPrinter = intPrinter
If IsMissing(ToFile) Then
toPrinter = True
Else
toPrinter = Not ToFile
End If
With Err
On Error Resume Next
Open mstrPrinter For Output Access Write Shared As #intPrinter
If .Number <> 0 Then
MsgBox .Number & " " & _
.Description, vbExclamation, "印表機錯誤"
OpenPrinter = -1
Else
If toPrinter Then Call PntInitPrinter(intPrinter)
End If
End With
End Function `關掉Printer
Public Function ClosePrinter(ByVal PrinterNo As Integer) As Boolean
ClosePrinter = True
On Error Resume Next
With Err
Close PrinterNo
If .Number <> 0 Then
MsgBox .Number & " " & _
.Description, vbExclamation, "印表機錯誤"
ClosePrinter = False
End If
End With End Function `印字串
Public Function DoPrint(ByVal PntStr As String, ByVal PrinterNo As Integer) As Boolean
DoPrint = True
With Err
On Error Resume Next
Print #PrinterNo, PntStr;
If .Number <> 0 Then
MsgBox .Number & " " & _
.Description, vbExclamation, "印表機錯誤"
DoPrint = False
Exit Function
End If
End With
End Function `跳頁
Private Function FormFeed(ByVal PrinterNo As Integer) As Boolean
FormFeed = DoPrint(vbFormFeed, PrinterNo)
End Function `*********************************************************************** ********
`目 的:設定回印表機內定值
`*********************************************************************** ********
Public Sub PntInitPrinter(ByVal PntNo As Integer)
Dim strTemp As String
strTemp = Chr(28) & Chr(38) `選擇中文模式
strTemp = strTemp & Chr(28) & Chr(20) `取消中文單列倍寬
strTemp = strTemp & Chr(28) & Chr(87) & "0" `解除四倍中文
strTemp = strTemp & Chr(28) & Chr(18) `解除中文壓縮字體列印
strTemp = strTemp & Chr(28) & Chr(75) `取消垂直列印
strTemp = strTemp & Chr(28) & Chr(68) `以一個中文字間隔印出
`兩個半形字元
strTemp = strTemp & Chr(28) & Chr(45) & "0" `取消底線
strTemp = strTemp & Chr(28) & Chr(107) & Chr(0) `宋體字
strTemp = strTemp & Chr(28) & Chr(85) `設定半形字元調整
strTemp = strTemp & Chr(28) & Chr(118) & "1" `設定表格連線
strTemp = strTemp & Chr(28) & Chr(116) & Chr(3) `BIG-5 碼 strTemp = strTemp & Chr(27) & Chr(85) & "1" `單向列印
strTemp = strTemp & Chr(28) & Chr(120) & "0" `中文非高速列印
strTemp = strTemp & Chr(27) & Chr(97) & "3" `左右對齊
strTemp = strTemp & Chr(27) & Chr(113) & "0" `正常字體
strTemp = strTemp & Chr(27) & Chr(70) `取消加強模式
strTemp = strTemp & Chr(27) & Chr(72) `取消雙擊模式
strTemp = strTemp & Chr(28) & Chr(20) `解除中文單列倍寬
strTemp = strTemp & Chr(27) & Chr(87) & "0" `關閉倍寬模式
strTemp = strTemp & Chr(27) & Chr(108) & Chr(1) `左邊界1個字元
strTemp = strTemp & Chr(27) & Chr(81) & Chr(255) `右邊界255個字元
strTemp = strTemp & Chr(27) & Chr(50) `1/6 吋列間距
strTemp = strTemp & Chr(27) & Chr(67) & Chr(66) `以列數設定頁長,一頁66列
strTemp = strTemp & Chr(28) & Chr(83) Chr(0) Chr(3) `設定中文字元間隔
strTemp = strTemp & Chr(28) & Chr(84) Chr(0) Chr(2) `設定半型字元間隔
strTemp = strTemp & Chr(27) & Chr(78) & Chr(2) `針線孔跳躍兩列
Call DoPrint(strTemp, PntNo)
End Sub `設定文字間隔 0最小 127最大 3是內定
Public Sub PntSetBetweenSpace(ByVal PntNo As Integer, ByVal n As Integer)
Dim strTemp As String
If n < 0 Then n = 0
If n > 127 Then n = 127
strTemp = Chr(28) & Chr(83) Chr(0) Chr(n) `設定中文字元間隔
strTemp = strTemp Chr(28) & Chr(84) Chr(0) Chr(n) `設定半型字元間隔
Call DoPrint(strTemp, PntNo)
End Sub `設定4倍文字方式列印 傳True則設定 傳False則取消
Public Sub PntEnlargeChar(ByVal PntNo As Integer, EnLarge As Boolean)
Dim strTemp As String
If EnLarge Then
strTemp = Chr(28) & Chr(87) "1" `設定2*2 中文字
Else
strTemp = Chr(28) & Chr(87) "0" `解除2*2 中文字
End If
Call DoPrint(strTemp, PntNo)
End Sub `設定/解除高速列印
Public Sub PntSetFastSpeed(ByVal PntNo As Integer, ByVal toFast As Boolean)
Dim strTemp As String
If toFast Then
strTemp = strTemp & Chr(28) & Chr(120) & "1" `中文高速列印
Else
strTemp = strTemp & Chr(28) & Chr(120) & "0" `中文非高速列印
End If
Call DoPrint(strTemp, PntNo)
End Sub
--------------------------------------------------------------------------------
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
whyzn
中階會員 發表:46 回覆:149 積分:54 註冊:2002-06-16 發送簡訊給我 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
印表機界面接腳 腳位 作用
1 -STROB
2 D0
3 D1
4 D2
5 D3
6 D4
7 D5
8 D6
9 D7
10 ACKNOWLEDGE
11 -BUZY
12 PAPER OUT
13 SELECT STATUS
14 -AUTO FEED
15 -ERROR
16 -INIT PRINTER
17 -SELECT INPUT
18-25 GND
平行阜I/O位址 I/O 位址 平行阜編號
03BCh-03BEh LPT1
0378h-037Ah LPT2
0278h-027Ah LPT3
BIOS系統查詢LPT所在位址 系統記憶位址 數值 平行阜編號
40:08h BC-03 LPT1
40:0Ah 78-03 LPT2
40:0Ch 78-02 LPT3
平行阜接腳與I/O對應
<1>資料阜 LPT1=3BCh,LPT2=378h,LPT3=278h
位元7 位元6 位元5 位元4 位元3 位元2 位元1 位元0
PIN9 PIN8 PIN7 PIN6 PIN5 PIN4 PIN3 PIN2 <2>狀態阜LPT1=3BDh,LPT2=379h,LPT3=279h
位元7 位元6 位元5 位元4 位元3 位元2 位元1 位元0
PIN11 PIN10 PIN12 PIN13 PIN15 -- -- -- <3>控制阜LPT1=3BEh,LPT2=37Ah,LPT3=27Ah
位元7 位元6 位元5 位元4 位元3 位元2 位元1 位元0
-- -- -- IRQ PIN17 PIN16 PIN14 PIN1 發表人 - jackkcg 於 2002/08/07 13:33:48 發表人 - jackkcg 於 2002/08/07 13:34:19
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |