- PR -

リッチテキストボックスに表示されている一番上の行数を取得するには?

1
投稿者投稿内容
suzu
会議室デビュー日: 2006/04/16
投稿数: 5
投稿日時: 2006-04-16 00:18
お世話になっております。
複数行を入力してあるリッチテキストボックスで、
表示されている一番上の行を取得できません。

例えば、テキストボックスの高さが行数4行分。
テキストボックスの総行数が12行。
の場合に、カレント行が8行目の場合、
テキストボックスの一番上の行は、
5、6、7、8のいずれかになります。

カレント行の取得はできているのですが、
今回は表示されている一番上の行数が取得できずにおります。

良い方法をご教授い頂ければと思います。
suzu
会議室デビュー日: 2006/04/16
投稿数: 5
投稿日時: 2006-04-16 00:24
すみません、環境はvb.netです。
宜しくお願い致します。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-04-16 00:41
EM_GETFIRSTVISIBLELINE を使えば取得できます。
RichTextBox を派生させたクラスを用意して、

コード:

Public Function GetFirstVisibleLine() As Integer
Const EM_GETFIRSTVISIBLELINE As Integer = &HCE
Dim m As Message = Message.Create(Me.Handle, _
EM_GETFIRSTVISIBLELINE, _
IntPtr.Zero, IntPtr.Zero)
Me.WndProc(m)
Return m.Result.ToInt32()
End Function


行数は表示行なのでワードラップにお気を付けて。

// うぅ、これまだうちのサイトで書いてなかった……。


<追記>
そう言えば SendMessage 使えばわざわざ派生させなくても良いですね。
どっちをとるかは考え次第ですが。
</追記>

[ メッセージ編集済み 編集者: Hongliang 編集日時 2006-04-16 00:44 ]
suzu
会議室デビュー日: 2006/04/16
投稿数: 5
投稿日時: 2006-04-16 00:54
早速のお返事有難うございます、実現できました。
ご教授頂きました通り、EM_GETFIRSTVISIBLELINE、SendMessage()を使用してみました。
本当に有難うございました、また宜しくお願い致します。


Private Const EM_GETFIRSTVISIBLELINE As Integer = &HCE
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim row As Integer = SendMessage(RichTextBox1.Handle,EM_GETFIRSTVISIBLELINE, -1, 0) + 1
MsgBox(row)
End Sub
1

スキルアップ/キャリアアップ(JOB@IT)