tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
RichTextBox 等における総行表示時のトータル行高さを取得(VB.NET) ( No.0 )  [親スレッドへ]
日時: 2011/03/22 10:17
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[リッチテキストボックス][][]                                        *
* キーワード:表示高さ,文字高さ,行高さ,コントロールの高さ,,                       *
***********************************************************************************
タイトル : RichTextBoxの内部の高さ
記 事 No : 55247
投 稿 日 : 2010/11/23(Tue) 12:38:55
元質問者 : たけ  

パネルに、RichTextBoxが貼ってあり、Dock=FIllにしてあります。
このパネルの大きさを、内部のRichTextBoxの内容に応じて、変更したいのです。
要件としては、RichTextBox部分のスクロールバーを出さずに、
内容に応じて画面を上下に大きくしたいのです。

http://bbs.wankuma.com/index.cgi?mode=al2&namber=55247&KLOG=92

上記サイトの質問に答えて作ったものです。
--------------------------------------------------------------------------------------
記事No : 55277
投稿日 : 2010/11/25(Thu) 00:30:31
回答者 : 花ちゃん
--------------------------------------------------------------------------------------
Private Sub Form1_Load(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles MyBase.Load
   With RichTextBox1
      .BorderStyle = BorderStyle.None
      .ScrollBars = RichTextBoxScrollBars.None
      .LoadFile("test.rtf", RichTextBoxStreamType.RichText)
   End With
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   Dim LineHeight As Integer
   With RichTextBox1
      .Focus()
      .Height = 1
      .SelectionStart = RichTextBox1.TextLength
      .ScrollToCaret()
      LineHeight = System.Math.Abs(.GetPositionFromCharIndex(0).Y)  'EM_GETSCROLLPOS と同様の動作
      .Height += LineHeight
      .SelectionStart = 1
   End With
' BorderStyle.None 以外で計測した場合は、枠分(6 ピクセル OS のスタイルによって違う)を
' 計測値に付加して広げてください。
' 同じく、RichTextBoxScrollBars.None 以外で計測した場合は、スクロールバーの高さ・幅分を
' (17 ピクセル程度 正確には、サンプルNo.357 参照)計測値に付加して広げるようにしてください。
End Sub

TextBox の場合、使用するフォントが一定なので、文字の高さと行数を調べれば、
トータル行高さが簡単に求める事できるが、RichTextBox の場合は、1文字毎に
使用するフォントが違う場合があるので、簡単に計測する方法が無い、色々調べて、
試している内にEM_GETSCROLLPOS で計測できる事を発見し、EM_GETSCROLLPOS と
同様の動作のRichTextBox.GetPositionFromCharIndex メソッド を使って測定。
(但し、この使い方が特殊)
    
実際に試して見ると解るが、スクロールバーの移動量等やTopに表示している行等を
調べても取得できそうだが、最後の行分だけがどうしても正しく取得する事ができない等
結構難しいです。



 [スレッド一覧へ] [親スレッドへ]