[リストへもどる]
一括表示

投稿時間:2003/02/26(Wed) 13:28
投稿者名:mamana
Eメール:
URL :
タイトル:
印刷時の余白サイズ(下と左側)
印刷のことについて質問します^^

このHPの「印刷関係」の「プリンターの印刷余白を取得」には
印刷時に上と右側の余白と用紙サイズを取得する方法が記載されていまて助かりました。
しかし、下と左側の余白も知りたいのですが、どのようにすればいいか分かりません…。

教えてくださいませ。。。

投稿時間:2003/02/26(Wed) 16:34
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 印刷時の余白サイズ(下と左側)
> このHPの「印刷関係」の「プリンターの印刷余白を取得」には
> 印刷時に上と右側の余白と用紙サイズを取得する方法が記載されていまて助かりました。
> しかし、下と左側の余白も知りたいのですが、どのようにすればいいか分かりません…。

何のために取得したいかは知りませんが?
サンプルを見て頂いたのなら解るかと思いますがX方向とY方向のマージンを取得して
おりますので、下も右も同じです。
(APIのリファレンスにX方向とY方向と書いてあったので同じものとカン違いしておりました
プリンターによっては制限している場合があるようです)

只、カン違いされている方がおられるようですが、ここで言う余白はExcelやWordで設定する
余白とは違います。プリンターが用紙のどの位置まで(から)印刷できるかだと思います。
最近のフチなしプリンターなら当然0です。どの範囲(どこに)に印刷するかはプログラムで
管理する必要があるかと思います。
従って右余白を設定してもその位置で折り返して印刷してくれる訳ではありません。

投稿時間: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"

投稿時間:2003/02/26(Wed) 23:58
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^2: 印刷時の余白サイズ(下と左側)
> ここのサンプルに右と下の印字不可能の領域のサイズを求める処理を追加してみました。

下記の書込みは私のカン違いでした。謹んでお詫び申しあげます。
従って削除したものと思って下さい。


私のカン違いならお詫びしますが、取得できるオフセット量は用紙端からのサイズであり
従って上下・左右は同じで、用紙のサイズからオフセット量を引いた物が物理的幅・高さになって
いるのではないでしょうか?
物理的高さや幅が前もってオフセット量と関係なく決められないと思います。
従って計算結果を又、逆算する意味はないのではないでしょうか?
左余白=右余白  上余白=下余白 と私は理解しております。

投稿時間:2003/02/27(Thu) 00:30
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^3: 印刷時の余白サイズ(下と左側)
うちのプリンタは、エプソン PM-780Cですが、このプログラムを実行すると
以下のようになります。

四辺ふちなしを設定しない場合
 左:3mm
 上:3mm
 右:3mm
 下:14mm

四辺ふちなしを設定した場合
 左:0mm
 上:0mm
 右:0mm
 下:0mm

また、プリンタのユーザーズガイドには、以下の記述があります。

印刷できる領域
本機は、標準設定で印刷する場合、紙送りの機構上どうしても用紙の上下左右に余白が必要です。
通常は上、左、右に各3mm、下に14mmの余白が必要ですが、プリンタドライバで設定することに
より、四辺フチなし(余白0mm)、または用紙下部の余白を3mmにすることができます。

投稿時間:2003/02/27(Thu) 01:34
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4: 印刷時の余白サイズ(下と左側)
失礼しました。私がカン違いしていたようです。
(カタログ値では上下左右3mmと記入されていたものですから)
標準と最大とで下余白が制限されていたのですね!
MSDNにもプリント マージンを計算するプログラムの使用方法として掲載されていました。
私のサンプルも修正しておきます。
どうもありがとうございました。そして、どうもすみませんでした。<m(__)m>