[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/04/08(Fri) 17:27
投稿者名:sora
URL :
タイトル:
FontSizeについて
TextBoxやLabelに文字を表示する際、文字が多いと入りきれなくなりますよね。
そこで、最適なFontSizeを調べる方法を教えて下さい。
※複数行になっても構わないです。
 MultiLine = True に設定しています。

PictureBoxのTextWidthを使ってみたけど、うまくいきませんでした。

よろしくお願いします。m(__)m

投稿時間:2005/04/08(Fri) 17:51
投稿者名:ガッ
Eメール:
URL :
タイトル:
Re: FontSizeについて
> TextBoxやLabelに文字を表示する際、文字が多いと入りきれなくなりますよね。
> そこで、最適なFontSizeを調べる方法を教えて下さい。
「最適」はどういう…?
まぁ、FontSizeをカウントダウンしていきながらTextWidthで測り、
適当なサイズを打診してみる手もありますね。
一発で決められる方法は、残念ながら分かりません(orz

> ※複数行になっても構わないです。
んー…面倒かも。
終端を"..."で省略していいなら直ぐにできそうだけどねぇ…

投稿時間:2005/04/12(Tue) 09:22
投稿者名:sora
URL :
タイトル:
Re^2: FontSizeについて
早速のお返事ありがとうございます。m(__)m

FontSizeをカウントダウンしながらTextWidthで調べていくと、
TextWithは1行の長さを返すので、見えにくいぐらい小さいFontSizeになってしまうんです。(;-;)
2行にしたらもっと大きなFontSizeでも可能なはずなんですが・・・。

今はLenで文字の長さを取得して、Textに入る文字数を超えたら
FontSizeを変更するようにしています。

<例>
 if Len(Text1.Text) > 12 then
     Text1.FontSize = 10
  End if
  if Len(Text1.Text) > 15 then
     Text1.FontSize = 9
  End if

この方法だとTextBoxやLabelに対して各々記述しないといけないので、
何かいい方法は無いかと・・・。(;^-^A

投稿時間:2005/04/12(Tue) 10:11
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: FontSizeについて
質問内容が矛盾しているような。
> ※複数行になっても構わない
なら、フォントサイズを一定でも複数行に渡って表示すればいいのでは。

> TextBoxやLabelに文字を表示する際、文字が多いと入りきれなくなりますよね。
文字はいくらでも入力(入ります)できます。 ただ、サイズ以上に入っている
場合は、部分しか表示しないだけ。

>TextWithは1行の長さを返すので、見えにくいぐらい小さいFontSizeになってしまうんです。(;-;)
2行なら求めた長さを2で割れば、いずれにしても計算するしかないのでは。

>この方法だとTextBoxやLabelに対して各々記述しないといけないので、
では、どのような設定ならいいのですか、どのような方法でも個々のコントロールに
何らかの設定をする必要があるかと思うのですが。

又、使用するフォントは一定ですか、(プロポーショナル・等幅フォント)
全角文字だけ・半角・全角が混在している 等でも変わってきます。

>最適なFontSize
とは、どのような基準でしょうか? 貴方の最適と私の最適では違うかも。
1文字なら300ポイントとかで表示してもいいのですか。

テキストボックスの幅が2000twip でフォントが MS ゴシックの9ポイントなら
2000/90=22.2 で半角で22文字入力できる事が判るので後は入れ物の大きさに合わせて
逆にフォントサイズを求めればいいのでは、それを関数化して呼び出せば。

投稿時間:2005/04/13(Wed) 16:19
投稿者名:sora
URL :
タイトル:
Re^2: FontSizeについて
花ちゃん様、返信ありがとうございます。m(__)m

言葉が足らず、説明下手でごめんなさい。
TextBoxやLabel等入れ物の一つ一つの大きさはそれぞれ固定で、
その大きさ内に全文表示させたいんです。

LenでFontSizeを求めるには、入れ物の大きさがそれぞれ異なるので、
1行で表示出来る文字数も異なる為、TextBoxやLabelに対して各々記述しています。
それで、どうにか1つの関数にまとめることが出来ないかと思ったんです。

まだVBを始めたばかりで、

> テキストボックスの幅が2000twip でフォントが MS ゴシックの9ポイントなら
> 2000/90=22.2 で半角で22文字入力できる事が判る

 ↑の入力出来る文字数の求め方を初めて知り、大変勉強になりました。

本当にありがとうございます。

投稿時間:2005/04/13(Wed) 17:49
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
下記をお試しあれ
Private Function GetFontSize(ByVal myString As String, _
                             ByVal ctlWid As Long, _
                             ByVal ctlHei As Long) As Single
    Dim fh(12) As Single, fw(12) As Single, FS(12) As Single, tw(12) As Integer
    Dim n  As Integer, i1 As Long, i As Single, j As Long
    Dim Ln As Integer, meFS As Single
    n = -1
    meFS = Me.FontSize
    '上下左右の余白分を考慮
    ctlWid = ctlWid - 0: ctlHei = ctlHei - 90
    For i = 6 To 15 Step 0.75  'フォントサイズの有効範囲
        Me.FontSize = i
        n = n + 1
        fw(n) = Me.TextWidth(myString)
        fh(n) = Me.TextHeight(myString)
        tw(n) = Me.TextHeight("あ")
        FS(n) = i
    Next i
    Me.FontSize = meFS
    For j = 8 To 4 Step -1 'フォントサイズ 9〜12
        For i1 = 1 To 4     '1行から4行までの表示の場合
            '折り返し時の表示できない分を半角1文字分考慮
            If fw(j) < (ctlWid - (tw(j) / 2)) * i1 Then
                If (ctlHei \ fh(j) >= i1) Then
                    '表示行数を取得
                  '  Ln = SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0&, 0&)
                    'Text1.Height の自動調整する場合は下記のように
                  '  Text1.Height = (Ln * fh(j)) + 90
                    GetFontSize = FS(j)
                    Exit Function
                End If
            End If
        Next i1
    Next j
    If GetFontSize < 9 Then
        MsgBox "指定のフォントサイズで表示できません"
        GetFontSize = 3
    End If
End Function
Private Sub Form_Load()
    Me.FontName = "MS Pゴシック"
    Me.FontSize = 9
    With Text1
        'テキストボックスのワードラップを抑止する
        Call SetNonWordWrap(.hWnd)
        .Width = 2000
        .Height = 1000
        .Text = ""
        .BorderStyle = 1
    End With
End Sub
Private Sub Text1_LostFocus()
    Text1.FontSize = GetFontSize(Text1.Text, 2000, 1000)
End Sub

投稿時間:2005/04/15(Fri) 14:29
投稿者名:sora
URL :
タイトル:
Re: 下記をお試しあれ
花ちゃん様、サンプルプログラムありがとうございます。m(__)m

とても素晴らしいですね。
花ちゃん様のおかげで出来ました!
私は、上下左右の余白分や半角1文字分等の考慮をしていませんでした。
フォントサイズの有効範囲もわからず、ただ闇雲にプログラム作成をしていたので
本当に勉強になりました。
本当にありがとうございます。

投稿時間:2005/04/15(Fri) 15:33
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^2: 下記をお試しあれ
> 私は、上下左右の余白分や半角1文字分等の考慮をしていませんでした。
試しに書いたものなので、使用フォントや半角・全角文字が混在する場合
計算通りに収まらない場合があります。
環境に合せて余白はとるようにして下さい。
(半角文字を使用しないなら全角1文字分とるとか)