tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルフォント(@)について
記事No11610
投稿日: 2016/01/25(Mon) 09:51
投稿者SUZUKI
vb6.0からvb2005に変換挑戦中の鈴木です
連続投稿で恐縮なのですが、また理解出来ない現象にぶつかりましたので
教えていただきたくよろしくお願いします

問題はvb2005になって@フォントが効かなくなり
色々検索してもダメとしかヒットしませんでした
あきらめかけていたのですが

下記は花ちゃん例題 SNO 096
インストールされているフォントの一覧です

'フォントの一覧を取得
    Dim ff As FontFamily
    For Each ff In System.Drawing.FontFamily.Families
         ComboBox1.Items.Add(ff.Name)
    Next
これでもちろん@フォントは表示されません

フォントのお勉強という事で 花ちゃん例題 S078
フォントダイアログボックスを使ってフォントの設定を
試して見た時です
   Dim fontDialog1 As New FontDialog
    With fontDialog1
        .ShowColor = True          
        .MinSize = 8              
        .MaxSize = 18              
        .Font = TextBox1.Font      
        .Color = TextBox1.ForeColor
        'ダイアログボックスを表示しOKボタンが押されたら
        If .ShowDialog = DialogResult.OK Then
            TextBox1.Font = .Font          
            TextBox1.ForeColor = .Color    
        End If
    End With

驚く事に@フォント一覧が表示されました
@HGPゴシックE等いっぱい
SNO 096 とはまったく違ったフォント一覧です

これはどのように理解したらよいのでしょうか
vb2005でそのつどフォントダイアログを出して印刷という
訳にも行きません
vb2005で@フォントを印刷できる可能性があるという事でしょうか?

[ツリー表示へ]
タイトルRe: フォント(@)について
記事No11611
投稿日: 2016/01/25(Mon) 11:43
投稿者Hongliang
WinFormにおいては、プリンタへのものも含め描画にGDI+というライブラリを使っています。(System.Drawing名前空間以下のものが、内部で扱っています)
このGDI+においては、縦書きフォントは直接的には使用されなくなりました。
FontFamily.Familiesなどで@つきの物が取得されないのはそのためです。
FontDialogはWindows標準のコモンダイアログを使っており、この部分はGDI+とは無関係のため、@つきフォントが含まれてしまっています。
これを選択したとしても、実際に取得されるFontオブジェクトは@なしの物と同じとして扱われます。
// 唯一、GdiVerticalFontプロパティに違いが出ますが、Graphicsオブジェクト等の描画メソッドからは無視されます。

GDI+では、Fontを縦書き用に指定するのではなく、
GraphicsのDrawStringに渡すStringFormatオブジェクトのFormatFlagsにDirectionVerticalを設定しておくことで、
・指定されたフォントから縦書き用グリフの取得
・描画方向の調整
が自動的に行われるようになっています。
(逆に言うとこれ以外できることがないのでこちらで調整ということが難しいわけですが)

// Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6.Printerを使って印刷するケースについては
// 存じません。

[ツリー表示へ]
タイトルRe: フォント(@)について
記事No11612
投稿日: 2016/01/25(Mon) 12:18
投稿者花ちゃん

> vb2005で@フォントを印刷できる可能性があるという事でしょうか?

結果としては、下記のようになります。

 http://hanatyan.sakura.ne.jp/yybbs/upl/1453691748-1.png

[ツリー表示へ]
タイトルRe^2: フォント(@)について
記事No11613
投稿日: 2016/01/25(Mon) 13:16
投稿者SUZUKI
Hongliang さん 花ちゃん さん
回答ありがとうございます
早速、”FormatFlagsにDirectionVerticalを設定しておくこと” を試して見ました
たしかに縦書きになりましたが、
イメージ通りにはなりませんでした
花ちゃんのご指摘通りです






かつ 文字が90度横向きをなる事が必要です
VB2005 からは@フォント印刷出来ないとなれば
文字回転を学習する予定ではいます

[ツリー表示へ]
タイトルRe^3: フォント(@)について
記事No11614
投稿日: 2016/01/25(Mon) 13:26
投稿者Hongliang
> ん
> や
> ち
> 花
>
> かつ 文字が90度横向きをなる事が必要です

ん?
それって、横書きを左に90度回転させただけでは?

[ツリー表示へ]
タイトルRe^4: フォント(@)について
記事No11615
投稿日: 2016/01/25(Mon) 14:09
投稿者SUZUKI
ちょっと仕様の食い違いがあったようですが
VB6.0 で単純に@フォントで印刷すると

花ちゃん  <−−−− この並びで一つ一つの文字が横になります

VB2005から@フォントの概念が変わったと言う事でしょうか?
(WINDOWS7 VB6.0の環境でも印刷文字は横になります)

> > ん
> > や
> > ち
> > 花
> >
> > かつ 文字が90度横向きをなる事が必要です
>
> ん?
> それって、横書きを左に90度回転させただけでは?

[ツリー表示へ]
タイトルRe^5: フォント(@)について(閉じさせて頂きます)
記事No11616
投稿日: 2016/01/25(Mon) 18:05
投稿者SUZUKI
    Dim fontDialog1 As New FontDialog
    Private Sub Button2_Click
        'フォントダイアログ ボックスを使ってのフォントの設定
        With fontDialog1
            .ShowColor = True
            .MinSize = 8
            .MaxSize = 50
            .Font = TextBox1.Font
            .Color = TextBox1.ForeColor
            'ダイアログボックスを表示しOKボタンが押されたら
            If .ShowDialog = DialogResult.OK Then
                TextBox1.Font = .Font
                TextBox1.ForeColor = .Color
            End If
        End With
    End Sub

    Private Sub Button3_Click
        PrintDocument1.Print()
    End Sub

    Private Sub PrintDocument1_PrintPage
        Dim g As Graphics = e.Graphics
        g.PageUnit = GraphicsUnit.Millimeter
        g.DrawString(TextBox1.Text, _
                    TextBox1.Font, Brushes.Black, 0, 0)

    End Sub

 このようなプログラムを作って見ました
 ボタン2を押してテキストBOX1のフォントを
 @フォントに設定します
 ボタン3で印刷します

 テキストBOX  
 花ちゃん  <−−−−− 横文字になります
 しかし、印刷すると直立不動の "花ちゃん”と印刷されてしまいます

 よって、ご指摘通り不可能で
 文字回転で検討する事とします

 回答ありがとうございました

[ツリー表示へ]