|
1,获得光标位置和字符个数.
Cpos=SendMessage(text1.hwnd,187,-1,0) '光标所在行的首字符在文本中的位置
Lpos=SendMessage(text1.hwnd,201,Cpos,0) '光标所在的行号
Line=SendMessage(text1.hwnd,193,Cpos,0) '这行的字符数.
2.获取第N行的文本
Dim ST As String
ST = Space(110)'必须要事先赋空格
Line=SendMessage(text1.hwnd,196, N-1, ByVal ST 'ST返回获取到的文本,Line返回文本的长度字节数
'下面的未成功
Dim str(256) As Byte, K As Integer
str(1)=1 '最大允许存放256个字符
K = SendMessage (Text1.hwnd,196,2,str(0)) '获取第3行的数据放在str中
text1.text = StrConv(str,vbUnicode) '转换为字符串后显示
说明:在调用SendMessage获取第N行字符串时,lParam需要说明为字节数组,在调用完成后,再将
字节数组转换为字符串;另外,调用前必须在lParam的前两个字节指明允许存放的最大长度,其中第一
个字节为低位,第二个字节为高位,本例将高位(即str(1))置1.说明最大允许存放256个字符。
3.开关显示器.
SendMessage Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0 '关闭显示器.
SendMessage Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1 '打开显示器
4.程序控制拉下或收起组合框的下拉列表
一般情况下,为了拉下或收起组合框的下拉列表,需要用键盘或鼠标进行操作,而有时我们希望程
序运行的某个时刻自动拉出下拉列表(比如在一些演示程序中),为了实现这个目的,我们也只有借助
于SendMessage函数,方法是发一个CB_SHOWDROPDOWN(&H14F)消息给组合框。
在发CB_SHOWDROPDOWN消息时,wParam参数决定了是拉下列表(=True)还是收起表(=False),
lParam无用(设为0)。
为说明具体的使用方法,下面提供简单的程序片段:
Const CB_SHOWDROPDOWN=&H14F
当程序中某处需要拉下组合框Combol的列表时,调用如下语句:
SendMessage Combol.hwnd,CB_SHOWDROPDOWN,True,0
当需要收起组合框Combol的列表时,调用如下语句:
SendMessage Combol.hwnd,CB_SHOWDROPDOWNN,False,0
5. 返回控件中显示的第一行的行号。
LineNo = SendMessageBynum(CTextBox.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0)
6.下面的函数能够滚动控件,不过在滚动之前最好判断控件的文本行数和能够显示的行数,以免滚动时
发生混乱。函数SendMessageBynum是SendMessage函数的安全声明函数,其定义与SendMessage函数完全
相同,只是函数名不同。
Function ScrollTextBox(CTextBox As TextBox, nVal As Long, Optional nVertical As _
Boolean = True) As Long
If nVertical Then
ScrollTextBox = SendMessageBynum(CTextBox.hwnd, EM_LINESCROLL, 0, nVal)
Else
ScrollTextBox = SendMessageBynum(CTextBox.hwnd, EM_LINESCROLL, nVal, 0)
End If
End Function
7.下面的函数将返回控件能显示的行数:(经试,总是引起程序崩溃)
'获取当前字体的矩形区域(即字体的高度与平均宽度等信息)
Private Declare Function GetTextMetrics Lib "gdi32" Alias "GetTextMetricsA" (ByVal hdc As Long, lpMetrics As TEXTMETRIC) As Long
Private Type TEXTMETRIC
tmHeight As Long '字符高度
tmAscent As Long '字符上部高度(基线以上)
tmDescent As Long '字符下部高度(基线以下)
tmInternalLeading As Long '由tmHeight定义的字符高度的顶部空间数目
tmExternalLeading As Long '加在两行之间的空间数目
tmAveCharWidth As Long '平均字符宽度
tmMaxCharWidth As Long '最宽字符的宽度
tmWeight As Long '字体的粗细轻重程度
tmOverhang As Long '加入某些拼接字体上的附加高度
tmDigitizedAspectX As Long '字体设计所针对的设备水平方向
tmDigitizedAspectY As Long '字体设计所针对的设备垂直方向
tmFirstChar As String '为字体定义的第一个字符
tmLastChar As String '为字体定义的最后一个字符
tmDefaultChar As String '字体中所没有字符的替代字符
tmBreakChar As String '用于拆字的字符
tmItalic As Byte '字体为斜体时非零
tmUnderlined As Byte '字体为下划线时非零
tmStruckOut As Byte '字体被删去时非零
tmPitchAndFamily As Byte '字体间距(低4位)和族(高4位)
tmCharSet As Byte '字体的字符集
End Type
Type RECT
Left As Long
Top As Long
Right As Long
bottom As Long
End Type
Public ST As String
Function GetVisibleLines(CTextBox As TextBox) As Long
Dim rc As RECT '以象素为单位
Dim tm As TEXTMETRIC
Dim hDC&, lfont&, oldfont&
Dim di&, lc&
lc = SendMessage(CTextBox.hwnd, EM_GETRECT, 0, rc)
lfont = SendMessage(CTextBox.hwnd, WM_GETFONT, 0, 0)
hDC = GetDC(CTextBox.hwnd)
If lfont <> 0 Then oldfont = SelectObject(hDC, lfont)
di = GetTextMetrics(hDC, tm)
If lfont <> 0 Then lfont = SelectObject(hDC, oldfont)
GetVisibleLines = (rc.bottom - rc.top) / tm.tmHeight
di = ReleaseDC(CTextBox.hwnd, hDC)
End Function
|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )
GMT+8, 2024-5-25 15:02 , Processed in 0.093843 second(s), 14 queries .
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.