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

投稿時間:2002/09/13(Fri) 21:17
投稿者名:たっくんパパ
Eメール:
URL :
タイトル:
プリンタの余白の取得
Printerオブジェクトで、印刷可能領域は ScaleHeight と ScaleWidth で取得できるのですが、その上余白、左余白を取得したいと思っています。
ScaleTop、ScaleLeft が何も指定しなければ「0」になると思うのですが、その「ScaleLeft=0,ScaleHeight=0」の位置が用紙のどこから始まるのかがプリンタによってまちまちで思うような位置に印字出来なくて困っています。
どなたか教えて下さい。

投稿時間:2002/09/13(Fri) 21:50
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: プリンタの余白の取得
たしか、以前同じ質問されていたですよね!
レスがなかったので、気にとめていたかいがあって、つい最近発見しました。

GetDeviceCaps APIで取得できます。

投稿時間:2002/09/13(Fri) 23:59
投稿者名:たっくんパパ
Eメール:
URL :
タイトル:
Re^2: プリンタの余白の取得
ありがとうございます!
APIは得意ではないのですが、やはり避けては通れない道なのですね(泣)。
頑張ります。

投稿時間:2002/09/14(Sat) 00:06
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: プリンタの余白の取得
下記を試して見て下さい。

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
Private Const PHYSICALOFFSETY = 113


Private Sub Command1_Click()
    Dim LeftMargin As Long
    Dim TopMargin  As Long
    Dim PhysHeight As Long
    Dim PhysWidth  As Long
    
    LeftMargin = (GetDeviceCaps(Printer.hdc, PHYSICALOFFSETX) _
                    * Printer.TwipsPerPixelX / 56.7)
    TopMargin = (GetDeviceCaps(Printer.hdc, PHYSICALOFFSETY) _
                    * Printer.TwipsPerPixelY / 56.7)
    PhysWidth = (GetDeviceCaps(Printer.hdc, PHYSICALWIDTH) _
                    * Printer.TwipsPerPixelX / 56.7)
    PhysHeight = (GetDeviceCaps(Printer.hdc, PHYSICALHEIGHT) _
                    * Printer.TwipsPerPixelY / 56.7)
    
    Label1.Caption = "プリンター用紙印刷余白(左) :   " & LeftMargin & " mm"
    Label2.Caption = "プリンター用紙印刷余白(上) :   " & TopMargin & " mm"
    Label3.Caption = "プリンター用紙サイズ(幅)   : " & PhysWidth & " mm"
    Label4.Caption = "プリンター用紙サイズ(高さ) : " & PhysHeight & " mm"
End Sub

投稿時間:2002/09/14(Sat) 08:18
投稿者名:たっくんパパ
Eメール:
URL :
タイトル:
Re^4: プリンタの余白の取得
花ちゃんさん、ありがとうございます。
サンプルコードまで・・・
これからも頑張りますのでよろしくお願いします。