[リストへもどる]
一括表示

投稿時間:2002/09/17(Tue) 11:44
投稿者名:Yuuko
Eメール:
URL :
タイトル:
APIによる印刷
Printer.Line にあたる API を教えてください。
環境は VB5 Win98 です。
------------
あるプリンターの印刷において不具合が発生し メーカーから
「Printerオブジェクトは不安定なので安定動作は保証しない。APIによる印刷をして下さい。」
と言われてしまい APIでの印刷をする事になってしまいました。

色々と調べてみましたが
Printer.Print にあたる TextOutA がやっと解った程度です。
他に Printer.ScaleMode Printer.FontName Printer.FontSize等も知りたいので 
そのようなサイト、ヘルプをご存知でしたら 教えてください。

お願いします。

投稿時間:2002/09/17(Tue) 13:32
投稿者名:NAO★
Eメール:
URL :
タイトル:
Re: APIによる印刷
GDIについて調べるといいと思います
VBからだとかなり面倒です(^^;

ちなみにおたずねの機能は
Printer.ScaleMode → GetMapMode
Printer.FontName → CreateFont,  SelectObject
Printer.FontSize → CreateFont
このあたりでしょうか?

どうせGDIを使うならVB.NETに移行した方が楽…かもしれません
別の苦労も出てきますが(^^;;

投稿時間: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

投稿時間:2002/09/17(Tue) 18:23
投稿者名:NAO★
Eメール:
URL :
タイトル:
Re^2: APIによる印刷
>    Dim x1 As Double
>    Dim y1 As Double
>    Dim x2 As Double
>    Dim y2 As Double

他にも原因があるかと思いますが、ぱっと見て気がついたのは
上の座標がLong型でないとダメだと思います

投稿時間:2002/09/18(Wed) 00:51
投稿者名:MIKAN
Eメール:
URL :
タイトル:
Re^2: APIによる印刷
>下記のようなソースを組んでみたのですが印刷出来ません。
>プリンタージョブは現れて消えるのですが
>用紙さえも出てこないのです。

 それって、プリンタに直接データを送るやり方ですよね。

1こ前のメッセージから
>色々と調べてみましたが
>Printer.Print にあたる TextOutA がやっと解った程度です。

 TextOutAで実際に印刷できた訳ではないのですね?

 http://support.microsoft.com/default.aspx?scid=kb;en-us;Q175535
のCommand2の方が、APIのみでのテキスト印刷のサンプルです。

投稿時間:2002/09/20(Fri) 15:39
投稿者名:Yuuko
Eメール:
URL :
タイトル:
Re^3: APIによる印刷
MIKANさん。ありがとうございます。

サンプルのTextOutは動作しました。
別の仕事が入って Lineの方は まだ確認は出来ていませんが
とりあえず 先にお礼を・・