用VB防止文本控件中的部分滚动

莫欺哥们木有媳

莫欺哥们木有媳

2016-02-19 14:52

图老师小编精心整理的用VB防止文本控件中的部分滚动希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

  Windows API的SendMessage函数可以用来向Visual Basic控件中 发送消息,例如向文本框控件上发送消息。本文介绍如何利用该函数 防止文本框控件中的部分文本滚动,即该控件中不能滚动的部分不能 被用户看见。

  发送消息到文本框控件

  Visual Basic中的文本框控件就是一个最小化的字处理程序。当 该文本控件的Mult iLine属性被设置为True时,则文本可以自动换行; 当在文本框控件中键入了许多文本时,控件中的文本会向上滚动。这 时文本就变得看不到了,但这些文本实际上仍然在控件中它们并 没有被删除。

  Windows API的SendMessage函数可以用来防止文本框控件中的文 本滚动而超出我们的视线。当创建该文本框控件时,它的客户区域格 式化为一个矩形(该区域就是键入文本的地方),可以给该控件发送EM_ SETRECTNP消息,对该矩形区域进行限制,以在文本框的客户区域中指 定一个特定区域。

  在下面的样例程序中,我们希望文本控件的后一半原封不动地保 持完整,即不希望文本滚动而超出视线。可以从文本框控件的Height 属性中提取出它的高度,并将该值除以2,得到该文本框控件后一半的 坐标。然后将该结果传递给SendMessage函数,告诉EM_SETR ECTNP防 止该矩形区域滚动。

  有些程序员可能会希望使用EM_SETRECT消息代替EM_SETRECTNP消 息。但是,使用EM_ SETRECT消息会停止Windows对该格式化矩形区域 中的文本的重新绘制,导致文本框控件中的文本看不到。

  样例程序

  该程序显示了如何临时冻结一个文本框控件中的特定部分,该部 分包含的文本不能滚动,因而不会超出视线之外,如下图所示。

  1.在Visual Basic中开始一个新的工程,采用缺省的方法建立For m1。

  2.将如下常量和声明语句添加到Form1的通用声明部分中(注意该 声明语句需要书写在一行内):

  

  Private Declare Function SendMessage Lib "User" (ByVal h Wnd As Integer, ByVal wMsg As Integer, ByVal wParam As Inte ger, lParam As Any) As Long  Const WM_USER = &H400  Const EM_SETRECTNP = WM_USER + 4  Const EM_SETRECT = WM_USER + 3

  对于32位环境下使用Visual Basic 5.0的用户,需要将如下声明 语句添加到Form1的通用声明部分中:

  

  Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVa l wParam Long, lParam As Any) AsLong  Const EM_SETRECTNP = &HB4  Const EM_SETRECT = &HB3

  3.将如下代码添加到Form1的Form_Load事件中:

  

  Private Sub Form_Load()  Text1.Text = "这是我们希望显示出来的第一段"  Text1.Text = Text1.Text & "它位于文本框控件中"  Text1.Text = Text1.Text & Chr$(13) & Chr$(10) & "这是第 二段,我们"  Text1.Text = Text1.Text & "希望将之冻结以使文本不能滚动 "  End Sub

  4.将如下代码添加到Form1的Click事件中:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  

  Private Sub Form_Click()  Dim R As RECT  Dim X As Long  ScaleMode = 3  R.Left = 0  R.Top = 0  R.Right = Text1.Width  R.Bottom = Text1.Height / 2  X = SendMessage(Text1.hWnd, EM_SETRECTNP, 0, R)  End Sub

  5.创建一个新的模块,采用缺省的方法建立Module1.Bas。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  6.将如下TYPE结构添加到Module1.Bas中:

  

  Type RECT  Left As Integer  Top As Integer  Right As Integer  Bottom As Integer  End Type

  对于32位环境下使用Visual Basic 5.0的用户,需要将如下TYPE 结构添加到Module1 .Bas中:

  

  Type RECT  Left As Long  Top As Long  Right As Long  Bottom As Long  End Type

  7.在Form1上添加一个文本框控件,采用缺省的方法建立Text1,将 其MultiLine属性设置为True。

  按下F5来执行该程序,我们可以看到文本框显示在Form1上。在窗 体上单击一次鼠标,将新的文本键入到该文本框控件中。这时我们可 以注意到,当我们在文本框控件的开头处键入新的文本时,在文本框控 件下半部分的文本不会滚动。

  如果我们将EM_SETRECT消息替代EM_SETRECTNP消息发送给文本框 ,再次运行该程序,这时我们会发现,文本框的下半部分显示不出来,尽 管实际上文本仍然是存储在控件中的。

展开更多 50%)
分享

猜你喜欢

用VB防止文本控件中的部分滚动

编程语言 网络编程
用VB防止文本控件中的部分滚动

vb实现防止用户编辑文本框控件中的内容

编程语言 网络编程
vb实现防止用户编辑文本框控件中的内容

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用SendMessage滚动文本框控件的内容

编程语言 网络编程
用SendMessage滚动文本框控件的内容

VB图片框在报表设计中屏幕滚动的问题

编程语言 网络编程
VB图片框在报表设计中屏幕滚动的问题

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

PPT制作滚动文本

电脑入门
PPT制作滚动文本

VB中控件大小随窗体大小变化

编程语言 网络编程
VB中控件大小随窗体大小变化

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

XML 中的常见问题 (三)

XML 中的常见问题 (三)

Tab键的多种用途

Tab键的多种用途
下拉加载更多内容 ↓