VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 印刷関係のメニュー
1.指定位置に(文字・罫線・指定フォントで)印刷する
2.ピクチャーの内容を印刷する
3.網掛け文字を表示及び印字
4.プリンターの指定方法
5.用紙サイズ・用紙の向き・用紙トレイ・印刷枚数・拡大縮小を指定する
6.プリンターの印刷余白及び用紙サイズを取得
7.関連付け起動によるファイルの印刷
8.[プリンターの設定]ダイアログボックスを表示する
9.その他上記以外の印刷関係のサンプル
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.


6.プリンターの印刷余白及び用紙サイズを取得
1.プリンターの印刷余白及び用紙サイズを取得
2.上記実行結果及び留意事項
3. 
4. 
5. 
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:追加なし
使用 API:
GetDeviceCaps
その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。
    :
このページのトップへ移動します。 1.プリンターの印刷余白及び用紙サイズを取得(200)  2002.09.02  

Option Explicit  

'ディバイスに関する情報を取得する(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

このページのトップへ移動します。 2.上記実行結果及び留意事項

 

 プリンターにより、印刷開始位置が違うので位置を揃える必要があるような場合、あらかじめ開始位置(余白)を取得して、その分を考慮しておくとプリンターによる印刷位置のずれが防止できます。
 当初APIのリファレンスにPHYSICALOFFSETX は X方向のマージン と書かれていたので、左右のマージン(左マージン と 右マージン)が同じと勘違いしておりました。
 Starfish
さんに教えて頂き、機種により違う事を知り、下余白・右余白もそれぞれ取得するように変更しました。 MSDNにHPにも掲載されていました。

 [SDK32] プリントマージンを計算するプログラムの使用方法
 [Howto]: プログラムを使用して、印刷の余白を計算する方法
 [HOWTO] GetDeviceCaps を使用して用紙の余白を設定する方法
今では、検索すると色々と情報が公開されているようですが、リンク等がよく切れるので、切れている場合は、上記語句をキーワードにして検索して見て下さい。
又、公開されている内にご自分のパソコン内にでも取り込んでおいて下さい。

このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
プリンターの印刷開始位置 用紙に対するプリンターの印刷開始位置
Visual Basic の Printer オブジェクトで取得できる情報は、印刷する用紙の物理的なサイズと印刷可能領域のみで、余白や印刷できない領域の情報にはアクセスできません。ただし、Win32 API 関数の GetDeviceCaps を使用することにより、これらの情報を取得できます。



このページのトップへ移動します。