プリンターの印刷余白を取得 |
プリンターの印刷余白及び用紙サイズを取得 (200) | |
Option Explicit 'SampleNo=200 WindowsXP VB6.0(SP5) 2002.09.02 'ディバイスに関する情報を取得する(908) Private Declare Function GetDeviceCaps Lib "gdi32" _ (ByVal hdc As Long, ByVal nIndex As Long) As Long Private Const HORZRES = 8 '実際のスクリーンの幅(実印刷領域) Private Const VERTRES = 10 '実際のスクリーンの高さ Private Const PHYSICALWIDTH = 110 '物理的幅(実用紙サイズ) Private Const PHYSICALHEIGHT = 111 '物理的高さ Private Const PHYSICALOFFSETX = 112 '印刷可能な左方向のマージン Private Const PHYSICALOFFSETY = 113 '印刷可能な上方向のマージン Private Sub Command1_Click() Dim LeftMargin As Long, TopMargin As Long Dim RightMargin As Long, BottomMargin As Long Dim PhysHeight As Long, PhysWidth As Long With Printer 'マージンをピクセル単位で取得しそれをmmに変換 LeftMargin = .ScaleX(GetDeviceCaps(.hdc, PHYSICALOFFSETX), _ vbPixels, vbMillimeters) TopMargin = .ScaleY(GetDeviceCaps(.hdc, PHYSICALOFFSETY), _ vbPixels, vbMillimeters) PhysWidth = .ScaleX(GetDeviceCaps(.hdc, PHYSICALWIDTH), _ vbPixels, vbMillimeters) PhysHeight = .ScaleY(GetDeviceCaps(.hdc, PHYSICALHEIGHT), _ vbPixels, vbMillimeters) '用紙サイズから印刷可能領域を差引きマージンを求める RightMargin = PhysWidth - (.ScaleX(GetDeviceCaps(.hdc, HORZRES), _ vbPixels, vbMillimeters) + LeftMargin) BottomMargin = PhysHeight - (.ScaleY(GetDeviceCaps(.hdc, VERTRES), _ vbPixels, vbMillimeters) + TopMargin) End With Label1.Caption = "プリンター用紙印刷余白(左) : " & LeftMargin & " mm" Label2.Caption = "プリンター用紙印刷余白(上) : " & TopMargin & " mm" Label3.Caption = "プリンター用紙印刷余白(右) : " & RightMargin & " mm" Label4.Caption = "プリンター用紙印刷余白(下) : " & BottomMargin & " mm" Label5.Caption = "プリンター用紙サイズ(幅) : " & PhysWidth & " mm" Label6.Caption = "プリンター用紙サイズ(高さ) : " & PhysHeight & " mm" End Sub |
|
プリンターにより、印刷開始位置が違うので位置を揃える必要があるような場合、あらかじめ開始 位置(余白)を取得して、その分を考慮しておくとプリンターによる印刷位置のずれが防止できます。 当初APIのリファレンスにPHYSICALOFFSETX は X方向のマージン と書かれていたので、左右 のマージン(左マージン と 右マージン)が同じとカン違いしておりました。 Starfish さんに教えて頂き、機種により違う事を知り、下余白・右余白もそれぞれ取得するよう に変更しました。 MSDNにHPにも掲載されていました。 http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/ japan/support/kb/articles/406/0/53.asp |
2003/02/27