リッチテキストコントロールのフォント形状について

解決


夏の朝も天玉うどん  2005-06-05 01:15:36  No: 122263

VB.NET  です。

リッチテキストコントロールで
フォント名  MSゴシック  標準  サイズ10で
Textプロパティに半角で"dousiteda"  とします。
これを実行し、画面に表示されたリッチテキストコントロールには
当然に"dousiteda"と表示されています。
ここでそれに続けて半角で"d"と入力すると明らかに先にプロパティで
設定した"d"と文字形状が異なっています。
これはどういうことで生じるのでしょうか?
同じにならなければおかしいと思うのですが?私の考え違いでしょうか?
どなたか、お分かりになる方ご教授いただけませんか?


夏の朝も天玉うどん  2005-06-05 18:26:49  No: 122264

自己レスです。とりあえず以下の方法で解決?しました。

RichTextBox1_TextChangedの中でTextbox1.Text=RichTextBox1.Rtfとして
その振る舞いを調べてみました。結果、以下のようなコードにてプロパティ
ウィンドウで指定したときにデザインウィンドウの中のリッチテキストボックスに表示される書体と同じ書体で描画できることがわかりました。
    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
        Static ch As Boolean = False
        
        If ch = False Then
            tmpSelStart = RichTextBox1.SelectionStart
            ch = True
        End If
        
        RichTextBox1.Rtf = Replace(RichTextBox1.Rtf, "\fswiss\fcharset0 Arial;", "\fnil\fcharset128 \'82\'6c\'82\'72 \'83\'53\'83\'56\'83\'62\'83\'4e;")
        
  If ch = True Then
            RichTextBox1.SelectionStart = tmpSelStart
            ch = False
        End If
        
    End Sub
もちろんReplace文の中の置き換える対象文・置き換える文は書体によって変わってきます。


ねろ  2005-06-06 19:46:49  No: 122265

結構悲惨なことになってますね。(^^;
IMEモードになってないと自動的にSystem Fontに切り替わってしまうのが原因か?
VB.NETのRichTextBoxはVB6のそれとかなり違ってますが、これは仕様なんでしょうかね。。。
RichTextBox1_TextChangedの度にReplaceでは、テキストのサイズが大きくなると、かなり重くなると思われ。

こっちの方が多少軽いかな。
Private Fnt As Font
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Fnt = New Font(RichTextBox1.Font.Name, RichTextBox1.Font.Size, RichTextBox1.Font.Style)
End Sub
Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles RichTextBox1.TextChanged
    RichTextBox1.Font = Fnt
End Sub


夏の朝も天玉うどん  2005-06-12 17:48:11  No: 122266

ねろ様、ありがとうございます。
確かにテキストの量が増えると重くなりますね。
ソースの可読性もねろ様が提示してくださったものの方がよいので
利用させていただきます。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加