说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

防止文本控件中的部分滚动-VB资料

HTML文档下载 WORD文档下载 PDF文档下载
防止文本控件中的部分滚动-VB资料
谭 翁
Windows API的SendMessage函数可以用来向VisualBasic控件中发送消息,例如向文本框控件上发送消息。本文介绍如何利用该函数防止文本框控件中的部分文本滚动,即该控件中不能滚动的部分不能被用户看见。
发送消息到文本框控件
Visual Basic中的文本框控件就是一个最小化的字处理程序。当该文本控件的MultiLine属性被设置为True的时候,则文本可以自动换行;当在文本框控件中键入了许多文本时,控件中的文本会向上滚动。这时文本就变得看不到了,但这些文本实际上仍然在控件中——它们并没有被删除。
Windows API的SendMessage函数可以用来防止文本框控件中的文本滚动因而超出我们的视线。当创建该文本框控件时,它的客户区域格式化为一个矩形(该区域就是键入文本的地方),可以给该控件发送EM_SETRECTNP消息,对该矩形区域进行限制,以在文本框的客户区域中指定一个特定区域。
在下面的样例程序中,我们希望文本控件的后一半原封不动地保持完整,即不希望文本滚动而超出视线。可以从文本框控件的Height属性中提取出它的高度,并将该值除以2,得到该文本框控件后一半的坐标。然后将该结果传递给SendMessage函数,告诉EM_SETRECTNP防止该矩形区域滚动。
有些程序员可能会希望使用EM_SETRECT消息代替EM_SETRECTNP消息。但是,使用EM_SETRECT消息会停止Windows对该格式化矩形区域中的文本的重新绘制,导致文本框控件中的文本会看不到。
 
样例程序
该程序显示了如何临时冻结一个文本框控件中的特定部分,该部分包含的文本不能滚动,因而不会超出视线之外。
1.在VisualBasic中开始一个新的工程,采用缺省的方法建立Form1。
2.将如下常量和声明语句添加到Form1的通用声明部分中(注意该声明语句需要书写在一行内):
Private Declare Function SendMessage Lib "User"
(ByVal hWnd As Integer, ByVal wMsg As Integer,
ByVal wParam As Integer, lParam As Any) As Long
Const WM_USER = &H400
Const EM_SETRECTNP = WM_USER + 4
Const EM_SETRECT = WM_USER + 3
对于32位环境下使用Visual Basic5.0的用户,需要将如下声明语句添加到Form1的通用声明部分中:
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
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事件中:
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。
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消息发送给文本框,再次运行该程序,这时我们会发现,文本框的下半部分显示不出来,尽管实际上文本仍然是存储在控件中的。
能准确“猜透”玩家心理,深度学习让游戏更智能 阿里过程改进专家:看板核心在于拉动式管理过程+数据化支持改进 英特尔Edison全面上市,专为小型可穿戴设备设计 APM最佳实践:Web 2.0和AJAX四大优化战略 开放•创新•共赢 2014华为开发者联盟沙龙即将开幕 排名前十的SQL和NoSQL数据库 干货议题,中国互联网安全大会免费门票等你来! 【云先锋】红象云腾:Hadoop将和高铁一样改变我们的生活 IDF 2014上开发者最应关注的三件事之:原生应用兼容性篇 《近匠》WRTnode创始人罗未:OpenWrt,下一个时代的Android AMD爆新一代架构,代号Zen! 【问底】严澜:数据挖掘入门——分词 顺丰集团IT副总裁徐庆强:信息化技术支撑高质量服务 【CTO俱乐部走进雅虎北京全球研发中心】活动图文实录 病毒式传播到商业价值,Docker开创以开发者为主导的商业模式 一周消息树: Windows 9系统截图大量曝光,一起来看看它长什么样! 腾讯李朝晖:不移动非互联,投资关注四大领域 【问底】Yao Yu:谈Twitter的百TB级Redis缓存实践 “OKCoin与你·北京一夜”:共商比特币可持续繁荣之道 苹果再发力:推Apple Pay,或将引发新一轮支付变革 CausalImpact,谷歌开源的R时域因果关系分析工具 腾讯云总裁陈磊:互联网和传统企业互联网化是主线 不得不看,苹果Pay技术大起底! 详解Apple Pay:一大波iOS原生应用正在逼近! 高性能微信公众平台开发 【先锋】事务、高性能,王涛谈打造超越MongoDB的NoSQL 浅谈互联网数据中心海量运营之道 一篇文章读懂开源web引擎Crosswalk Facebook创建新开源组织TODO,Google、Twitter等继续捧场 微软明日将启动第二轮裁员 涉及所有的事业部 IBM推出Watson Analytics 将人机对话带进企业决策 我不想用第三方控件,如果我想使把Panel中的内容达到一个清屏效果(便如由上向下刷新,但最前有一些粉碎状效果,或是百叶窗什么的。) 有关异常的问题 如何用最简单的方法控制在数据窗口最后一列按回车键增加一行? 哪有ASP的技术手册呀?有关组件用法的 那位能有一个使用xpoint的应用?我不知道应该怎么用xpoint,有什么好??? 为什么我建立了两个读写线程,当频繁读写硬盘后,无法刷新界面呢? 再请教:如何得到浏览器的窗口的尺寸? 高分求助!!!怎样用VC在98下建立一拨号连接? 曾经的话题想改变命运的请走进来不想再说多少有自已看懂了的曾经在这里发过言的朋友可以和我联系,QQ12545029,scaer123@163.net socket编程,如何使connect()30秒超时???? 请问国内有OpenGL的比较全面的代码下载站点吗?能否提供几个URL?谢谢! 关于操作符重载的问题 有什么办法隐藏一个文件夹,使别人清除隐藏属性也看不到。 com的奇怪问题,27分 新手三层结构。问题多多。。。 jsp怎样连数据库? 高分讨教:这个vb+SQL2000的出错提示太奇怪了. 有在深圳考程序员的吗? 大家觉得电信好还是联通好啊 为什么在Win2000下我的GeForce GTS的显卡用了最新的公版驱动,在Windows优化大师中测试 一个小问题,如何在Access97数据库中创建和使用临时表??? 请问一个问题:有一个字符串,我想去掉左边固定的几个字符,剩下右边未知的几个字符!怎么做?谢谢~~ 菜鸟提问,网页上的自动变化的图片用什么作的呀? 请问哪有免费的web mail系统下载? 如何新建一个数据链接? 我想给自己的控件加一个ImageList和ImageIndex属性,选中ImageList后,在ImageIndex中显示图像列表。应如何做? 曾经的话题想改变命运的请走进来不想再说多少有自已看懂,了的曾经在这里发过言的朋友可以和我联系,QQ12545029,scaer123@163.net 如何在ASP中实现广告的按比率播放? dbedit 的问题,???????? private 里声明的函数居然调用不了? 如何得到字体的宽度和高度? ???????如果你说你对DELPHI懂,请进 SAMPLE QUESTION 在DELPHI中如何使用其他语言开发的主见? 请问LINK : warning LNK4098: defaultlib "mfcn42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library是什么含义? 请问,如何删除一个单项链表的头节点?? 怎样成为编程高手!请教高手们!! b/s程序在客户端生成EXCEL报表问题,梦天请进? 求解:如何将一幅图片或文件存入数据库??? 在用UpdateBatch方法保存纪录时VB提示:数据提供程序或其他服务返回E_FAIL状态。错误号:80004005,我死活也调不出来,还望各位高手指点一二。 菜鸟求教:要怎样去买一款满意的笔记本电脑?(29分) 我新生成一个继承自TPanel的类,但我想有其Create时,在其上放置一个TImage,请问: 急!新手请教:想查一个字符串是否存在于另一字符串中,如"asd" 不在"abca sd"中,该是哪个函数 为何网能上Ftp软件和SQL Server和Foxmail用不了? 急!!!谁有RTF文件格式中元素说明?给一份!谢先!!!!70分奉上! 请问VC中如何配置ADO(详细些)???????????????????? 关于一个DW的求和问题 问win32汇编大师(vBin等)一个非常难的问题,请看下面的源码: 请帮我看一看这个问题(关于死锁),顺便送分。 欢迎讨论jsp与ASP.NET技术 vb6+SQL2000中,在用UpdateBatch方法保存纪录时VB提示:数据提供程序或其他服务返回E_FAIL状态。错误号:80004005,我死活也调不出来,还望各位高手指点一二。 关于如何导出SQL SERVER 的数据到Excel表?? 148开方等于几倍根号几?突然忘了、、、麻烦了! 在括号里填上适当的数,然后列成综合算式. 长方体、正方体各部分名称 三分之根号三 的开方等于多少啊 (1)用S表示圆的面积,r表示半径,圆面积的计算公式就是( )(2)一个圆的半径是10dm,这个圆的直径是( )dm,周长是( )dm,面积是( )平方分米(3)如果一个圆的半径扩大3倍,那么它的周 长方体和正方体有什么关系 两个圆的周长比是四比五这两个圆的面积比是多少?急 圆的面积公式中S=派R2,S于R成正比例关系还是反比例关系? 小学长方体和正方体的体积问题!把一个长是6分米得长方体,沿着宽切成两个小长方体后,表面积增加了20平方分米原来长方体的体积是多少? 两个圆的周长比是4:5,这个圆的面积比是( : 我马上就要交试卷了! 圆的面积为什么=派r的2次方 有两个圆,第一个圆的半径是4厘米,第二个圆的周长与第一个圆的周长的比是4:5.第二个圆的面积是多平方厘米 圆的面积2πr这是什么公式?但怎么我的工程力学上的圆的面积公式是这个:(πd^2)/4为什么捏 高数证明半径为r的圆的面积为s=派r平方 十六进制1000转换成十进制数是多少?请写明计算步骤~ 在圆的面积公式里r等于什么 若m+m分之1等于根号5,则正数m-m分之1的平方根是多少 十六进制1000转换成十进制数是?解题思路 八进制和十六进制的数怎么求,如(101)8 和(101)16 数电求大神.一位十进制、二位三进制 、 计算机的十六进制1000转化成十进制数是多少啊?怎么计算啊 若根号m=7,则m=_,m的平方根是_. 将十进制数3344化为七进制. 列式计算: X的24%比2多2.8,求X   (综合算式) 若-根号2是m的一个平方根,则m+7的取值范围是多少? 94 9B 40 03 转换数字是1765请问这个是几进制的代码?转换的方程是什么. 8个x比5个x多48怎么列算式 最好是第一单元的, 新华小学2010年五年级下册期末语文数学试卷 要像(5:x=8:2)怎样列的式子 若负的根号2是m的一个平方根,则m+7的平方根是? 五年级下册数学试卷苏教版要苏教版的 一辆客车从甲地到乙地,第一天行了全程的1/5,第二天行了450km,这时已行路程和剩下路程的比是3:7.甲、乙两地相距多少千米? 金钥匙小学四年级下册数学试卷 已知2m+1与m-4是正数a的平方根,求3次根号a-1的值 百分数奥数题 快 SOS 求人教版的四年级下册数学试卷是期末考试的 已知一个正数的平方根是m+3和2m-151)求这个正数是多少?2)√(m+5)的平方根是多少? 求小学六年级数学题~~~~~`拜托 急用 小学四年级下册数学试卷 (人教版)第三单元测试 若m+1/m=根号5,则正数m-1/m的平方根是?m^2-2+1/m^2=1 是怎么得到的?为什么=1? 十进制数 378 转换成十六进制数的是? 我想知道过程是怎么做的?谢啦 53页 小数的进制转换10进制小数转2进制2进制小数转16进制2进制小数转8进制2进制小数转10进制.简单好操作的笔算方式 计算2004÷(2004+2004/2005)=( )请妖精momo1987把过程写详细一点,如果好我就会采纳! 圆的面积公式S=πr²,S与r之间的关系是 小数二、八、十、十六进制互相转换比如二进制10101101.11十进制5032 把1,2,5,6,7,8,9,10,13,分别填在括号里(每个数字只能用一次),使三个算式都正确( ) + ( )= ( ) + ( ) = ( ) * ( ) = 圆中R,r,d,s,c,还有圆的面积公式和周长公式?还有半圆的面积公式和周长公式 1第6题答案求出下列抛物线的开口方向,对称轴及顶点(1)y=-3x²+12x-3(2)y=4x²-24x+26(3)y=2x²+8x-6(4)y=1/2x²-2x-1 应用题 爷爷是1936年2月29日出生,到2005年他一共过了几个生日 1.b²×b的m次方+b的³×b的m+1次方=?2.x的4次方·x的³+7x的六次方·x-2x的五次方·x²=?3.x的3n+1次方·x+3x的n+1次方·x的2n+1次方=? 若m为根号2的小数部分,则m方加m加根号2等于多少? 爷爷是2月29日出生的,满60岁时,他过了几个生日?要算式,谢谢! 某一项工作,甲单独做20天可完成,乙单独做30天可完成,现在两人合作,中间甲休息了3天,乙休息了若干天,终于用16天完成.那么乙休息了多少天? 八进制数26553转化为十六进制数是多少?要求有过程 根号48开方等于几 某种笔记薄大号本1元买3本,中号本1元买4本,小号本1元买5本.如果用6元买得笔记薄25本,问大,中,小号各几本? 已知8个一样的正方体,它们的棱长总和是288厘米,把这8个正方体拼成一个长方体,已知8个一样的正方体,它们的棱长总和是288厘米,把这8个正方体拼成一个长方体,这个长方体的表面积是多少?体
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn