- ベストアンサー
VB Printerオブジェクトに関して
ご回答が頂けないようですので再投稿です。 今回応答がない場合は違うサイトを探します。。 Printerオブジェクトを使用して伝票出力をします。 出力文字列の表示位置に関してご教授願います。 Printer.CurrentX = (縦位置) Printer.CurrentY = (横位置) Printer.Print (出力文字) ※単位はミリメートルです。 ※伝票(縦:114、横:210) Printer.CurrentXの指定方法が分かりません。 テストで指定して実装してみたのですが私の勝手な 推測ですが余白??の関係で私が意図した位置に表示 されません。CurrentXの指定は余白分を考慮して 設定しないといけないのでしょうか? ご教授のほどよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まず、社外向けなら、再配布可能な、他社のアドオンをお勧めします。 社内向けなら、努力してください。 VB6のプリンターコマンドはまったく出鱈目です。 また、プリンタードライバーは、マシンの差を吸収してくれません。LAN経由になるともっとひどいです。 と言いつつ、サイズから行くと宅急便の送り状のように見えますが、ひとつの方法として FORM に CommonDialog1 貼り付け 印刷コマンドに PRINTER_SET Printer.ScaleMode = 0 Printer.height = 7350 '7300 '紙が 厚いので 理論値より大きい Printer.width = 19500 Printer.Scale (0, 0)-(300, 127) Printer.Print ’プリント開始 Dim tate_y As Integer Dim yoko_x As Integer tate_y = -5 誤差調整 yoko_x = 0 Printer.FontName = "P明朝" If Data1.Recordset!郵便番号 = "" Or IsNull(Data1.Recordset!郵便番号) = True Then Else Printer.FontSize = 20 X = 0 Do While Len(Data1.Recordset!郵便番号) > X If X > 2 Then Printer.CurrentX = yoko_x + 44 + X * 10 '38-7 Else Printer.CurrentX = yoko_x + 40 + X * 10 ' 35-7 End If Printer.CurrentY = tate_y + 7 Printer.Print Mid(Data1.Recordset!郵便番号, X + 1, 1) X = X + 1 Loop End If * * * * * Printer.FontSize = 14 Printer.CurrentX = yoko_x + 40 Printer.CurrentY = tate_y + 160 Printer.Print 自社名 Printer.EndDoc 1枚終わり /////// Public Sub PRINTER_SET() For I = 0 To Printers.Count - 1 If Printers(I).DeviceName = RENPURIDRV Then Set Printer = Printers(I) Exit For End If Next I End Sub
その他の回答 (3)
- taocat
- ベストアンサー率61% (191/310)
こんにちは。 まさかとは思いますが、 Printer.ScaleMode はミリメートルになってますよね? Printer.ScaleMode = 6 でしたっけ? 外してましたらご愛嬌ということで。。。(^^;;; 以上です。
- lasichi
- ベストアンサー率31% (122/389)
プリンターにもよりますが、(プリンタが)物理的に印刷できない余白とプリンタドライバの設定による余白を考慮する必要があると思います。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
今、わたしはVB6が無いので、CurrentX/Yの動きはわかりません。 ところで、、、 質問を見る限り、業務用のアプリを作成ですよね? パッケージではなく、特定の納品先へのアプリですよね? 「伝票」を印刷するプリンタは、固定ではないのですか? これらが前提としてと、、、 そちらに実環境と同型のプリンタがあれば、余白設定値も含め手順書として納めればいいように思いますが、いかがでしょうか?