文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
文本框中光标位置的获得
用VB导入导出你的IE收藏夹
VB应用程序访问SQL Server方法探讨
VB访问SQL Server数据库技术全揭密
自动上网抓数据的机器人
自己的IE——用VB制作浏览器
VB中如何保存Webbrowser中的整个页面..
在VB中该如何控制其它程序的弹出窗口..
保存webbrowser中的HTML内容
破译动网验证码的简单方法
轻松获取QQ密码
VB.NET获取硬盘序列号的方法
WEBBROWSER 技巧一(收藏)
VB自动登陆网络站点详解(二):Inet..
获取webbrowser控件网页的源码
WebBrowser控件说明
关于用VB做更漂亮的窗体的思考
VB中访问存储过程的几种办法
VB6中改变屏幕的分辨率和刷新频率
VB编写一个能显示百分比的自定义进度..
公农历转换VB类
VB.NET窗口渐淡关闭
使用VB实现邮箱自动注册(二):修改..
VB.NET轻松实现任务栏程序
VB.NET启动外部程序
利用vb实现图片上传
VB实现局域网内的文件传输
VB 一个Function传回多个值
在VB中实现多线程
VB 手机号码编码程序


技术教程 -> VB教程 ->  
用VB快速读取TextBox第N行的数据
来源:转载   人气:926   录入时间:2007-11-8
    TextBox 是以 vbCr+vbLf 为分行符号, 如果我们要逐一读取 TextBox 每一行, 无非是寻找 vbCr+vbLf 的所在位置, 然后取出每一行的字串, 不过这个方法不快,而且如果我们要读取第 N 行数据,还是要从第 1、2、…N-1 行逐一读起,实在麻烦。 还好 Windows API 提供有读取 TextBox 第 N 行的功能, 细节如下:
   
   1、API 的声明:
   
   Public Const EM_GETLINE = &HC4
   Public Const EM_LINELENGTH = &HC1
   Public Const EM_LINEINDEX = &HBB
   
   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 Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
   
   2. 程序范例:
   
   
   Sub TB_GetLine(ByVal hWnd As Long, ByVal whichLine As Long, Line As String)
   
   Dim length As Long, bArr() As Byte, bArr2() As Byte, lc As Long
   
   lc = SendMessage(hWnd, EM_LINEINDEX, whichLine, ByVal 0&)
   
   length = SendMessage(hWnd, EM_LINELENGTH, lc, ByVal 0&)
   
   If length > 0 Then
   ReDim bArr(length + 1) As Byte,bArr2(length - 1) As Byte
   Call RtlMoveMemory(bArr(0), length, 2) '准备一个存储器,传递消息之前先在存储器的前两个字节填入存储器的长度
   Call SendMessage(hWnd, EM_GETLINE,whichLine, bArr(0))
   Call RtlMoveMemory(bArr2(0), bArr(0), length)
   Line = StrConv(bArr2, vbUnicode)
   Else
   Line = ""
   End If
   
   End Sub
   
   
   ' 假设要读取 Text1 第 5 行的数据
   
   Dim S As String
   
   Call TB_GetLine( Text1.hWnd, 5, S )
   
   ' 传回值 S 即等于第 5 行的数据
   
   ( 注:TextBox 的行次是从 0 起算。)
   
   站长在去掉有关bArr2的定义后,并将Line=Strconv(bArr2,vbUnicode)改为Line=StrConv(bArr,vbUnicode)发现程序照常运行,似乎bArr2在本程序中是多余的。不知哪位大虾能告知本人bArr2在这里的作用。
   




Copyright(C)2007-2024 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987