全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3017
推到 Plurk!
推到 Facebook!

印表機中斷 int 17H 有哪些參數

 
whyzn
中階會員


發表:46
回覆:149
積分:54
註冊:2002-06-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-22 10:36:42 IP:61.223.xxx.xxx 未訂閱
請問印表機中斷 int 17H 除了 (dx=印表機) AH=00 印一字元 AH=01 初始化 AH=02 讀狀態 之外還有哪些參數可以使用,有經驗的高手指點一下 Thanks a lot. ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
aip999
初階會員


發表:10
回覆:63
積分:44
註冊:2002-03-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-22 11:01:14 IP:210.201.xxx.xxx 未訂閱
引言: 請問印表機中斷 int 17H 除了 (dx=印表機) AH=00 印一字元 AH=01 初始化 AH=02 讀狀態 之外還有哪些參數可以使用,有經驗的高手指點一下 Thanks a lot. ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
好像沒了吧
whyzn
中階會員


發表:46
回覆:149
積分:54
註冊:2002-06-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-22 11:13:46 IP:61.223.xxx.xxx 未訂閱
譬如說: 進紙,退紙‧‧‧ 等 ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-06-27 19:19:34 IP:61.221.xxx.xxx 未訂閱
你要寫發票格式嗎?或是類似通訊標籤的非正規格式報表嗎? 進紙,退紙‧‧‧ 可以使用winapi但是你須限制某長度並會浪費一刀空間 因為我也沒找到退紙部份 如epson的印表機會退紙是直接做在硬體上面
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
whyzn
中階會員


發表:46
回覆:149
積分:54
註冊:2002-06-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-06-28 18:37:29 IP:61.223.xxx.xxx 未訂閱
是為了撕紙的問題而需要進退紙, 像 Panasonic P1121 的印表機,只能由面板操作,而不能由軟體設定 自動定頁撕紙, 所以我的做法是,直接寫印表機 ESC 控制指令到 Printer Port (用 asm) 慘的是,在我這裡可以正確執行,但到客戶的電腦卻會造成套表混亂不能對齊 所以才想到應該透過 中斷來呼叫 比較不會出 差錯 ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-07-05 02:46:26 IP:61.70.xxx.xxx 未訂閱
此為轉載忘記那裡看到的 參考看看也許你找就知道了 一般來說,進入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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-07-12 20:32:35 IP:61.223.xxx.xxx 未訂閱
謝謝 Jackkcg 兄提供寶貴資料。 ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○●
竹密不妨水過,山高無礙雲飛
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-08-07 13:32:12 IP:61.221.xxx.xxx 未訂閱
印表機界面接腳     腳位 作用  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
系統時間:2024-09-29 4:57:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!