如何得到多行文本框的实际高度

crazymens 2001-10-16 05:57:00
文本框可以设置成多行模式,这样当输入内容的高度超过文本框实际高度的时候文本框会自动的出现一个滚动条。我的问题是如何知道文本的内容高度超过文本框的高度,并且求出文本框内文本的高度。
我的思路是先用Sendmessage得到文本框内数据行总行数,然后用GetTextMetrics
函数返回文本框字体的高度,但是试验之后发现不行,因为文本框字体和字体的大小都是变化的,而且还要求出行和行之间的行间距,查了一下午资料就是找不到头绪,希望大虾们能够帮忙阿!
...全文
211 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
crazymens 2001-10-19
  • 打赏
  • 举报
回复
好的,我去看看fontsize是什么东东! :)

大家继续阿,不要给我的思路限制死,可能有别的方法!
crazymens 2001-10-18
  • 打赏
  • 举报
回复
高手,你们快点出来阿
progame 2001-10-18
  • 打赏
  • 举报
回复
我想可以通过fontsize*某个系数得到的,你去试一下
crazymens 2001-10-18
  • 打赏
  • 举报
回复
怎么没有人回答呢?
crazymens 2001-10-18
  • 打赏
  • 举报
回复
楼上的兄弟,你的TextHeight从那里来的阿?
pp616 2001-10-18
  • 打赏
  • 举报
回复
上面的已经得到行数了。下面就是得到高度的问题了。
你可以计算没行开头的字的高度,然后加起来。或计算一行的高度然后*行数就好了。
如:假设已经知道是N行了。
那高度=TextHeight(Left(txt, 1))*n就是高度了啊。
hydnoahark 2001-10-16
  • 打赏
  • 举报
回复
看错了
hydnoahark 2001-10-16
  • 打赏
  • 举报
回复
简单,使用EM_GETLINECOUNT.
添加一个textbox, 设置multiline=true

Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const EM_GETLINECOUNT = &HBA


Private Sub Command1_Click()
Dim iLines As Long
iLines = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0&, 0&)

MsgBox (iLines)
End Sub

7,788

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧