🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.visualbasic
Article #49

任意の位置にフォームを印刷する方法は?

#49
From: tkata
Date: Wed, 22 Apr 1998 00:00
75 lines
3596 bytes
 任意の位置にフォームを印刷する方法は?

 通常、VBでフォームを印刷するには、PrintFormメソッドを使います。
   (例:frm1.PrintForm
      Printer.EndDoc )
 しかし、PrintFormメソッドだと、用紙の任意の位置にフォームを印刷する
ことができません。

 ちなみに、マイクロソフトのサンプルソースも試してみたのですが、ダメ
でした。A4用紙が白紙のままプリントアウトされるのです。

 よろしくご教授願います。

 回答例:
  ・この本を見たら
  ・ここのWebへ行ってみれば
  ・直接の答えは知らないが、APIの○○○を使ったら?
  ・APIは知らんけど、やり方は○○○と思うよ (PaintPictureメソッド?)
  ・その他[   ]

----------------------------------------------------------------------
・PrintForm を使わないフォーム イメージの印刷
http://www.microsoft.com/japan/developer/vbasic/
http://www.microsoft.com/japan/developer/vbasic/techinfo/
http://www.microsoft.com/japan/developer/vbasic/resource/sample.htm

Attribute VB_Name = "PrnFrmEx"
Option Explicit

'これら 2 つの Decrare 宣言は API ビューワーを利用するのが確実です。
#If Win32 Then
    Private Declare Function StretchBlt Lib "gdi32" (ByVal hDC As Long, _
                   ByVal X As Long, ByVal Y As Long, _
                   ByVal nWidth As Long, ByVal nHeight As Long, _
                   ByVal hSrcDC As Long, _
                   ByVal XSrc As Long, ByVal YSrc As Long, _
                   ByVal nSrcWidth As Long, _
                   ByVal nSrcHeight As Long, _
                   ByVal dwRop As Long) As Long
#Else
    Private Declare Function StretchBlt Lib "GDI" (ByVal hDC As Integer, _
                   ByVal X As Integer, ByVal Y As Integer, _
                   ByVal nWidth As Integer, ByVal nHeight As Integer, _
                   ByVal hSrcDC As Integer, _
                   ByVal XSrc As Integer, ByVal YSrc As Integer, _
                   ByVal nSrcWidth As Integer, ByVal nSrcHeight As Integer,
_
                   ByVal dwRop As Long) As Integer
#End If
Private Const SRCCOPY = &HCC0020
Public Sub PrintFormEx(frm As Form)
' 引数
' frm : 印刷したいフォーム
'
' 使用例
' PrintFormEx Form1

    Dim result As Long

    ' Visual Basic にプリンタの使用を認識させるためのダミー コード
    Printer.Print " "
    Printer.CurrentX = 0
    Printer.CurrentY = 0

    result = StretchBlt(Printer.hDC, 0, 0, _
                   frm.ScaleWidth / Printer.TwipsPerPixelX, _
                   frm.ScaleHeight / Printer.TwipsPerPixelY, _
                   frm.hDC, 0, 0, _
                   frm.ScaleWidth / Screen.TwipsPerPixelX, _
                   frm.ScaleHeight / Screen.TwipsPerPixelY, _
                   SRCCOPY)
    Printer.EndDoc
End Sub
----------------------------------------------------------------------
Technical Details
Message-ID: <6hjdjk$r4p$1@fs.in.hitachi-it.co.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 105c2e,c6d5c6e88b5bc8d9,start
X-Google-Attributes: gid105c2e,public
From: "tkata" <tkata@in.hitachi-it.co.jp>
Subject: 任意の位置にフォームを印刷する方法は?
Date: 1998/04/22
Message-ID: <6hjdjk$r4p$1@fs.in.hitachi-it.co.jp>
X-Deja-AN: 347256446
Content-Transfer-Encoding: 7bit
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-2022-jp"
X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3007.0
Organization: 日立IT
Newsgroups: fj.lang.visualbasic