DOBON.NETプログラミング道掲示板

■35200 / 4階層)  VB.NetでVB6.0と同じFontを指定しても同様に印刷されない
□投稿者/ ゆりりん 一般人(3回)-(2022/10/26(Wed) 13:45:04)
  • アイコン> 逆に VB6 や VBA 側で GDI+ を使いたい場合は、Declare ステートメントで
    > GdiPlus.dll のもつ API 群を呼び出す形になりますね。
    > GdipDrawImageRectI API とか、GdipDrawString API とか。
    >
    > 今回は VB6 開発をするわけでも無いので、蛇足だとは思いますが。

    ありがとうございます。

    アドバイスをいただき、TextOutを使用して、印刷のプログラムを作成し、印刷してみたのですが、
    座標は合っているようなのですが、想定していたよりかなり小さく印刷されてしまい、ほとんど解読できないような大きさでした。
    単純に大きな値にしたら、見えるようにはなったのですが、Fontサイズの指定の仕方がわかりません。
    色々調べてみたのですが、わからなかったので、また、ここに質問させていただきます。

    ※以前のVB.Netのサンプル

    e.Graphics.PageUnit = GraphicsUnit.Millimeter
    Dim f As New Font("MS ゴシック", 9, FontStyle.Regular)
    e.Graphics.DrawString("IN-OUT<AB>CD EFG-HIJK-LMN A<10>", f, Brushes.Black, 12.5, 30.7)

    だったので、同様に、同じFontとFontSizeを指定して以下のようにやってみました。
    少し長いですが、すみません。

     ' 印刷データを指定の位置に出力します
    <System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")> _
    Friend Shared Function TextOut(ByVal hdc As IntPtr, _
    ByVal nXStart As Integer, ByVal nYStart As Integer, _
    ByVal lpString As String, ByVal cbString As Integer) As Integer
    End Function

    ' 論理フォントを作成します
    <System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")> _
    Friend Shared Function CreateFont(ByVal nHeight As Integer, ByVal nWidth As Integer, ByVal nEscapement As Integer, _
    ByVal nOrientation As Integer, ByVal fnWeight As Integer, ByVal fdwItalic As Boolean, _
    ByVal fdwUnderline As Boolean, ByVal fdwStrikeOut As Boolean, ByVal fdwCharSet As Integer, _
    ByVal fdwOutputPrecision As Integer, ByVal fdwClipPrecision As Integer, ByVal fdwQuality As Integer, _
    ByVal fdwPitchAndFamily As Integer, ByVal lpszFace As String) As IntPtr
    End Function

    --------- 省略 ---------

    Private Sub pd_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)

    Dim mFont As IntPtr
    Dim mFontOld As IntPtr

    ' Graphicsの設定をします
    e.Graphics.PageUnit = GraphicsUnit.Millimeter

    Dim intX As Integer = 0 ' X座標
    Dim intY As Integer = 0 ' Y座標
    Dim intFont As Integer = 0 ' フォントサイズ
    Dim Dt As String ' 印刷データ

    Dim hdc As IntPtr

    ' 印刷データを設定します
    Dt = "IN-OUT<AB>CD EFG-HIJK-LMN A<10>"

    ' --- QRコードを印刷 ---

    ' デバイスコンテキストを識別するハンドルを取得します
    hdc = e.Graphics.GetHdc()
    ' 座標とFontSize設定
    intX = 3
    intY = 5
    intFont = 1
    Call SetFont(hdc, "QR-01", intFont) 'QR-01:プリンタに登録したQRコードのFont
    Call PrintTextOut(hdc, intX, intY, Dt, Dt.Length) ← このQRコードはきちんと印刷されます

    ' グラフィックオブジェクトを削除し、システムリソースの解放をします
    DeleteObject(mFont)
    ' デバイスコンテキストにオブジェクトの選択をします
    SelectObject(hdc, mFontOld)
    ' デバイスコンテキストハンドルを解放します
    e.Graphics.ReleaseHdc(hdc)

    ' --- 文字列を印刷 ---

    ' デバイスコンテキストを識別するハンドルを取得します
    hdc = e.Graphics.GetHdc()
    ' 座標とFontSize設定
    intX = 12
    intY = 30
    intFont = 9
    Call SetFont(hdc, "MS ゴシック", intFont)
    Call PrintTextOut(hdc, intX, intY, Dt, Dt.Length) ← これが読み取れないくらい小さく印刷されます

    ' グラフィックオブジェクトを削除し、システムリソースの解放をします
    DeleteObject(mFont)
    ' デバイスコンテキストにオブジェクトの選択をします
    SelectObject(hdc, mFontOld)
    ' デバイスコンテキストハンドルを解放します
    e.Graphics.ReleaseHdc(hdc)


    End Sub

    ' 論理フォント作成

    Private Sub SetFont(ByVal control As IntPtr, ByVal fontFamily As String, ByVal fontSize As Integer)

    mFont = CreateFont(fontSize * -1, 0, 0, 0, 400, 0, 0, 0, 1, 0, 0, 0, 0, fontFamily)
    mFontOld = SelectObject(control, mFont)

    End Sub

    ' 文字列描写

    Private Sub PrintTextOut(ByVal hdc As IntPtr, ByVal intX As Integer, ByVal intY As Integer, ByVal strPrint As String, ByVal intCount As Integer)

    ' SATO CL4NX-J 609dpi(24dot/mm)より1dot辺りのMillimeterを指定しています
    Dim dbldotmm As Double = 0.04166
    Dim intPixelX As Integer = Convert.ToInt16(intX / dbldotmm)
    Dim intPixelY As Integer = Convert.ToInt16(intY / dbldotmm)

    Call TextOut(hdc, intPixelX, intPixelY, strPrint, intCount)

    End Sub

    e.Graphics.DrawStringの時と、同じFontとFontSizeなのですが、印刷される大きさが違ってしまいます。
    FontSizeはどのように設定すればよいのでしょうか。

    どうぞよろしくお願いいたします。

違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[3]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない /魔界の仮面弁士 →Re[5]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない /魔界の仮面弁士
 
上記関連ツリー

Nomalアイコン VB.NetでVB6.0と同じFontを指定しても同様に印刷されない / ゆりりん (22/10/21(Fri) 11:45) #35185
Nomalアイコン Re[1]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない / 魔界の仮面弁士 (22/10/21(Fri) 16:52) #35189
  └Nomalアイコン Re[2]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない / ゆりりん (22/10/22(Sat) 00:32) #35193
    └Nomalアイコン Re[3]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない / 魔界の仮面弁士 (22/10/24(Mon) 12:03) #35195
      └Nomalアイコン VB.NetでVB6.0と同じFontを指定しても同様に印刷されない / ゆりりん (22/10/26(Wed) 13:45) #35200 ←Now
        └Nomalアイコン Re[5]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない / 魔界の仮面弁士 (22/10/26(Wed) 18:29) #35202
          ├Nomalアイコン Re[6]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない / ゆりりん (22/10/28(Fri) 10:38) #35207
          └Nomalアイコン Re[6]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない / ゆりりん (22/10/28(Fri) 16:49) #35212
            └Nomalアイコン Re[7]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない / 魔界の仮面弁士 (22/10/28(Fri) 21:29) #35214
              └Nomalアイコン Re[8]: VB.NetでVB6.0と同じFontを指定しても同様に印刷されない / ゆりりん (22/11/02(Wed) 11:23) #35215 解決み!

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -