> できれば、PictureBoxは使いたくないんです > なぜかというと、本当はAccessで使いたいんです > で・・ > AccessならFormの印刷でできるはずなんですが > FormにListViewを使用すると、印刷が正しくできないんで > DLLとかでサポートしたいんです
サンプルがどんなものかはチェックしていませんが、 クリップボード経由でALT+PrintScreenキーを利用しています。 関数で作成していますが、DLL、EXEにも簡単にできるかと思います。 前提としてAPIの利用宣言が必要です。
'API利用宣言 Public Declare Sub keybd_event Lib "user32" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long)
'関数本体 Public Function cfintPrtScr() As Integer
Const strProcName = "cfintPrtScr" On Error GoTo Err_Rtn
Dim PictureRatio! '縦横比率 Dim PicHeight! '画像幅 Dim PicWidth! '画像高さ Dim PrnHeight! 'プリンタ幅 Dim PrnWidth! 'プリンタ高さ
'マウスポインタを砂時計にする Screen.MousePointer = vbArrowHourglass
'==================================================================== '画像の取得:仮想キーコードをWindowsに渡してCripBoardに貼り付ける '==================================================================== 'クリップボードの初期化 Clipboard.Clear ' [Alt]キーを押す keybd_event VK_LMENU, _ 0, _ KEYEVENTF_EXTENDEDKEY, _ 0 ' [PrintScreen]キーを押す keybd_event VK_SNAPSHOT, _ 0, _ KEYEVENTF_EXTENDEDKEY, _ 0 DoEvents ' [PrintScreen]キーを離す keybd_event VK_SNAPSHOT, _ 0, _ KEYEVENTF_EXTENDEDKEY Or _ KEYEVENTF_KEYUP, _ 0 ' [Alt]キーを離す keybd_event VK_LMENU, _ 0, _ KEYEVENTF_EXTENDEDKEY Or _ KEYEVENTF_KEYUP, _ 0 '==================================================================== '印刷前処理 (印字方向、縮尺率の設定) '==================================================================== intClipW = Clipboard.GetData().Width '取得した画像の幅 intClipH = Clipboard.GetData().Height ' 〃 高さ PictureRatio! = intClipW / intClipH
'印刷方向の設定 '画像が横長のとき If PictureRatio! >= 1 Then Printer.Orientation = vbPRORLandscape '横印刷 '画像が縦長のとき Else Printer.Orientation = vbPRORPortrait '縦印刷 End If
'単位をあわせる PrnWidth! = Printer.ScaleX(Printer.ScaleWidth, _ Printer.ScaleMode, _ vbHimetric) PrnHeight! = Printer.ScaleY(Printer.ScaleHeight, _ Printer.ScaleMode, _ vbHimetric)
'画像が印刷範囲外の場合縮尺率を算出して小さい方を採用する If (intClipW > PrnWidth!) Or (intClipH > PrnHeight!) Then dblPrZoomW = (PrnWidth! / intClipW) dblPrZoomH = (PrnHeight! / intClipH) ' ZOOMに対応していないPRINTERがあるので自力で縮尺 If dblPrZoomW > dblPrZoomH Then PrnWidth! = Int(intClipW * dblPrZoomH) PrnHeight! = Int(intClipH * dblPrZoomH) Else PrnWidth! = Int(intClipW * dblPrZoomW) PrnHeight! = Int(intClipH * dblPrZoomW) End If End If '単位を元に戻す PrnWidth! = Printer.ScaleX(PrnWidth!, vbHimetric, Printer.ScaleMode) PrnHeight! = Printer.ScaleY(PrnHeight!, vbHimetric, Printer.ScaleMode)
'==================================================================== '印刷処理 '==================================================================== Printer.PaintPicture Clipboard.GetData(), 0, 0, PrnWidth!, PrnHeight!
'印刷を終了し、制御を印刷デバイスやスプーラに渡す Printer.EndDoc DoEvents
'マウスポインタをデフォルトにする Screen.MousePointer = vbDefault cfintPrtScr = 0 Exit Function '==================================================================== 'エラー処理:プリンタエラーは無視 '==================================================================== Err_Rtn: On Error Resume Next '印刷JOBがない場合にエラーで落ちない為 cfintPrtScr = -1 '印刷できない場合にOSからエラーが出るためJOBを消す Printer.KillDoc Screen.MousePointer = vbDefault Err = 0 Exit Function End Function
|