Const EM_GETLINECOUNT = &HBA
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim LastLine As Long '注释:最后的行数
Dim LineHeight '注释:每行的高度
Dim numsPrivate Sub Form_Load()
Set Me.Font = rchText.Font
LineHeight = Me.TextHeight("样本")
rchText.Height = LineHeight
End SubPrivate Sub rchText1_Change()
Dim Ret As Long
Ret = SendMessage(rchText1.hWnd, EM_GETLINECOUNT, 0, 0&) '注释:取行数
If Ret <> LastLine Then
If rchText1.Height + rchText1.Top + LineHeight > Me.ScaleHeight And Ret > 1 Then
If LastLine <= Ret - 1 Then
Exit Sub '注释:如果已经是最大高度,保持
End If
LastLine = Ret - 1 '注释:超过最大高度
Else
LastLine = Ret
End If
rchText1.Height = LastLine * LineHeight '注释:修改高度
End IfEnd SubPrivate Sub Text1_GotFocus(Index As Integer)
LastLine = SendMessage(rchText1.hWnd, EM_GETLINECOUNT, 0, 0&)End Sub
代码功能是richtextbox 高度随行数增加而增加dan但是运行的时候 rchtext1的第一行总是滚到最上面,看不到。而最好多出来一空白行!!!!!!!! 请帮忙看看 分还好商量:)
解决方案 »
- 讨论 winsock 常见以外情况和解决办法~
- 请问如何使用EXCEL中的宏实现批处理
- 关于集合的问题
- 怎样用做一个液晶显示的钟表呀?谢谢各位高手帮忙!!!!!
- 如何设置msgflexgrid中特定一格的对齐方式?
- 请问:VB中如何实现例如FORTRAN中 向打开一个的新文件中写入内容?
- 谁有kodak image edit control控件呀 发给我。谢谢啊
- 一年300万美元 , 算不算多 ???
- 如何定义有返回的过程!在线等待
- 程序是中文的,可以在日文的 WINDOWS 98 上正常显示 , 及运行吗 ?
- 如何根据RichTextBox、TreeView和WebBrowser的内容动态改变控件的Height值呢?在线等待。恳求达人帮忙!
- 左右声道如果控制
Const EM_SCROLL = &HB5
Const SB_LINEUP = 0
Const EM_GETFIRSTVISIBLELINE = &HCE
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim LastLine As Long '注释:最后的行数
Dim LineHeight '注释:每行的高度
Dim nums
Private Sub Form_Load()
Set Me.Font = RichTextBox1.Font
LineHeight = Me.TextHeight("样本")
RichTextBox1.Height = LineHeight + 150
End Sub
Private Sub Text1_GotFocus(Index As Integer)
LastLine = SendMessage(RichTextBox1.hWnd, EM_GETLINECOUNT, 0, 0&)
End SubPrivate Sub RichTextBox1_Change()
Dim Ret As Long
Ret = SendMessage(RichTextBox1.hWnd, EM_GETLINECOUNT, 0, 0&) '注释:取行数
If Ret <> LastLine Then
If RichTextBox1.Height + RichTextBox1.Top + LineHeight > Me.ScaleHeight And Ret > 1 Then
If LastLine <= Ret - 1 Then
Exit Sub '注释:如果已经是最大高度,保持
End If
LastLine = Ret - 1 '注释:超过最大高度
Else
LastLine = Ret
End If
RichTextBox1.Height = LastLine * (LineHeight) + 300 '注释:修改高度
End If
While SendMessage(RichTextBox1.hWnd, EM_GETFIRSTVISIBLELINE, 0, 0) > 0
Debug.Print "ddd"
SendMessage RichTextBox1.hWnd, EM_SCROLL, SB_LINEUP, 0
WendEnd Sub加了一个判断第一个可见行是不是第一行。另外你需要把高度设置高一点,这样可以在输入的时候保持输入行和第一行都是完全可见的。
需要用到SubClas技术。部分代码如下:
'先绑定消息:
'自动适应尺寸
SendMessageLong m_hWnd, EM_SETEVENTMASK, 0, ENM_REQUESTRESIZE '设置事件掩码'再在SubClass消息处理中加入: Case WM_NOTIFY '系统通知
CopyMemory tNMH, ByVal lParam, Len(tNMH)
If (tNMH.hwndFrom = m_hWnd) Then
Select Case tNMH.code
Case EN_REQUESTRESIZE
Dim lngH As Long
Call CopyMemory(rResize, ByVal lParam, Len(rResize))
lngH = (rResize.rc.Bottom - rResize.rc.Top) * Screen.TwipsPerPixelY
rtbThis.Height = lngH
......
不过有唯一一个问题:控件高度有限制的!~
看看里面关于“Bottomless”的描述就知道了!~