投稿日 | : 2003/02/26(Wed) 22:25 |
投稿者 | : Starfish |
Eメール | : |
URL | : |
タイトル | : Re: 印刷時の余白サイズ(下と左側) |
ここのサンプルに右と下の印字不可能の領域のサイズを求める処理を追加してみました。
ついでに、スケールの変換は即値を使わないようにしてみました。
Private Declare Function GetDeviceCaps Lib "gdi32" _
(ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Const PHYSICALHEIGHT = 111 '物理的高さ
Private Const PHYSICALWIDTH = 110 '物理的幅
Private Const PHYSICALOFFSETX = 112 '印刷可能なX方向のマージン
Private Const PHYSICALOFFSETY = 113 '印刷可能なY方向のマージン
Private Sub Command1_Click()
Dim LeftMargin As Long
Dim TopMargin As Long
Dim PhysHeight As Long
Dim PhysWidth As Long
Dim RightMargin As Long
Dim BottomMargin As Long
'マージンをピクセル単位で取得しそれをmmに変換
LeftMargin = Printer.ScaleX(GetDeviceCaps(Printer.hdc, PHYSICALOFFSETX) _
, vbPixels, vbMillimeters)
TopMargin = Printer.ScaleY(GetDeviceCaps(Printer.hdc, PHYSICALOFFSETY) _
, vbPixels, vbMillimeters)
PhysWidth = Printer.ScaleX(GetDeviceCaps(Printer.hdc, PHYSICALWIDTH) _
, vbPixels, vbMillimeters)
PhysHeight = Printer.ScaleY(GetDeviceCaps(Printer.hdc, PHYSICALHEIGHT) _
, vbPixels, vbMillimeters)
RightMargin = PhysWidth - LeftMargin - _
Printer.ScaleX(Printer.ScaleWidth, vbTwips, vbMillimeters)
BottomMargin = PhysHeight - TopMargin - _
Printer.ScaleY(Printer.ScaleHeight, vbTwips, vbMillimeters)
Label1.Caption = "プリンター用紙印刷余白(左) : " & LeftMargin & " mm"
Label2.Caption = "プリンター用紙印刷余白(上) : " & TopMargin & " mm"
Label3.Caption = "プリンター用紙サイズ(幅) : " & PhysWidth & " mm"
Label4.Caption = "プリンター用紙サイズ(高さ) : " & PhysHeight & " mm"
Label5.Caption = "プリンター用紙印刷余白(右) : " & RightMargin & " mm"
Label6.Caption = "プリンター用紙印刷余白(下) : " & BottomMargin & " mm"