投稿日 | : 2002/09/17(Tue) 17:50 |
投稿者 | : Yuuko |
Eメール | : |
URL | : |
タイトル | : Re: APIによる印刷 |
早々にご返答 ありがとうございました。
>どうせGDIを使うならVB.NETに移行した方が楽かも…しれません
ユーザーさんの指定なもので・・(^^;
提示いただいたキーワードで いくつか参考になりそうな
ところが見つかりましたので がんばってみましたが・・。
下記のようなソースを組んでみたのですが印刷出来ません。
プリンタージョブは現れて消えるのですが
用紙さえも出てこないのです。
'----------------------------------------
'宣言部
'----------------------------------------
' StartDocPrinterに必要な構造体
Private Type DOC_INFO_1
pDocName As String
pOutputFile As String
pDatatype As String
End Type
Private Declare Function OpenPrinter Lib "winspool.drv" _
Alias "OpenPrinterA" _
(ByVal pPrinterName As String, phPrinter As Long, _
pDefault As Any) As Long
Private Declare Function StartDocPrinter Lib "winspool.drv" _
Alias "StartDocPrinterA" _
(ByVal hPrinter As Long, ByVal Level As Long, _
pDocInfo As DOC_INFO_1) As Long
Private Declare Function StartPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function WritePrinter Lib "winspool.drv" _
(ByVal hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, pcWritten As Long) As Long
Private Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
'----------------------------------------
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal nXStart As Long, ByVal nYStart As Long, ByVal lpString As String, ByVal cbString As Long) As Boolean
'----------------------------------------
'実行部
'----------------------------------------
Private Sub Command3_Click()
Dim x1 As Double
Dim y1 As Double
Dim x2 As Double
Dim y2 As Double
Dim OldCurrentPos As POINTAPI '古いカレントポジションが格納される
Dim hPrinter As Long
Dim di As DOC_INFO_1
Dim TmpS As String
Dim RetC As Long
di.pDocName = App.Title
di.pOutputFile = vbNullString
di.pDatatype = "RAW"
'プリンターオープン
Call OpenPrinter("レーザー", hPrinter, vbNullString)
Call StartDocPrinter(hPrinter, 1, di)
Call StartPagePrinter(hPrinter)
'線を書いてみる
x1 = 10
y1 = 15
x2 = 190
y2 = 180
RetC = MoveToEx(hPrinter, x1, y1, OldCurrentPos)
RetC = LineTo(hPrinter, x2, y2)
'文字を書いてみる
TmpS = "なんたらかんたら"
RetC = TextOut(hPrinter, x1, y1, TmpS, LenB(StrConv(TmpS, vbFromUnicode)))
'終了
Call EndPagePrinter(hPrinter)
Call EndDocPrinter(hPrinter)
Call ClosePrinter(hPrinter)
End Sub