Mr.Tの場所

特攻野郎Aチームじゃないよー

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  207  : 記事  0  : コメント  840  : トラックバック  43

ニュース

  • 性別:男
  • 猫1:まる
  • 猫2:もろ
  • 猫3:にゃん左部郎
  • タバコ:男は黙ってJPS
[わんくま同盟] C#, VB.NET 掲示板
フィードメーター - Mr.Tの場所

書庫

日記カテゴリ

Mr.Tです、こんにちは。

Ognasさんのエントリ:
http://blogs.wankuma.com/ognac/archive/2007/09/10/95118.aspx

上記のエントリの話は、エスケープシーケンス制御のプリンタに対して、.NETな世界から倍角なFontを発行なんぞ
できるもんか、ということなんでが、じゃあそもそも.NETな世界では倍角ってできないんか、とおもいちょっと作成。

VB.NETで新規プロジェクト作成して、FormにPictureBoxとボタンを一個貼り付け。

Private pSize As Integer = 2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim g As Graphics = PictureBox1.CreateGraphics()
    g.Clear(Me.BackColor)
    g.ScaleTransform(pSize, 1)  '横倍角
    pSize += 1
    Dim fnt As New Font("MS UI Gothic", 20)
    g.DrawString("熊", fnt, Brushes.Black, 0, 0)
    fnt.Dispose()
    g.Dispose()
End Sub

あら簡単。というか、まあ適当なんで。
ScaleTransform(pSize, 1)のところで、サイズを指定しているわけです。というかこの場合だと、絵として表示しなくちゃ
なりませんね。

で、印刷してみようと思い、更にボタン一つ貼り付け。以下がソース全文。

Imports System.Drawing
Public Class Form1

    Private pSize As Integer = 2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim g As Graphics = PictureBox1.CreateGraphics()
        g.Clear(Me.BackColor)
        g.ScaleTransform(pSize, 1)  '横倍角
        pSize += 1
        Dim fnt As New Font("MS UI Gothic", 20)
        g.DrawString("熊", fnt, Brushes.Black, 0, 0)
        fnt.Dispose()
        g.Dispose()
    End Sub

    Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim pd As Printing.PrintDocument = New Printing.PrintDocument

        AddHandler pd.PrintPage, AddressOf pd_PrintPage

        If MessageBox.Show("印刷しちゃうぞ?", "確認", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
            pd.Print()
        End If

    End Sub

    Private Sub pd_PrintPage(ByVal sender As Object, _
         ByVal e As System.Drawing.Printing.PrintPageEventArgs)
        '画像を描画する
        Dim fnt As New Font("MS UI Gothic", 20)
        e.Graphics.ScaleTransform(pSize, 1) '横倍角
        e.Graphics.DrawString("熊", fnt, Brushes.Black, 0, 0)
        '次のページがないことを通知する
        e.HasMorePages = False

        fnt.Dispose()
    End Sub
End Class

実行画面

プリンタに対しても、やっぱり画像描画みたいになるんで、横倍角なFontクラス自体は無理。
レイアウト的に、画像として利用できるような(イラストの一部に利用したいとか)なら、できそうな気もしますが
それ以外の使い道はなさそうな気もします。

投稿日時 : 2007年9月10日 20:04

コメント

# re: .NETで横倍角、縦倍角の文字を表示、印刷する 2007/09/11 19:40 Ognac
e.Graphics.ScaleTransformで作画するのでFontではなくなりますものね。.netの世界では Fontとしての形とGDIでの形の認識が大事ですね。それにしても 「CreateFontに制御文字を組み込む」というのは理解を超えてました。

Post Feedback

タイトル
名前
Url:
コメント