代码如下:

Option Explicit

Public Const WM_USER = &H400
Public Const EM_EXGETSEL = WM_USER + 52

Public Const EM_LINEFROMCHAR = &HC9
Public Const EM_LINEINDEX = &HBB
Public Const EM_GETSEL = &HB0

Public Type CHARRANGE
    cpMin As Long
    cpMax As Long
End Type

Public Type POINTAPI
    x As Long
    y As Long
End Type

Public Declare Function SendMessage Lib "user32" Alias _
                        "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As _
                        Long, ByVal wParam As Long, lParam As Any) As Long

Public Declare Sub CopyMemory Lib "kernel32" Alias _
                        "RtlMoveMemory" (pDst As Any, pSrc As Any, _
                        ByVal ByteLen As Long)

'取得光标所在的行和列
Public Function GetCurPos(ByRef TextControl As Control) As POINTAPI
    Dim LineIndex As Long
    Dim SelRange As CHARRANGE
    Dim TempStr As String
    Dim TempArray() As Byte
    Dim CurRow As Long
    Dim CurPos As POINTAPI

TempArray = StrConv(TextControl.Text, vbFromUnicode)

'取得当前被选中文本的位置 适用于 RichTextBox
    'TextControl 用 EM_GETSEL 消息
    Call SendMessage(TextControl.hWnd, EM_EXGETSEL, 0, SelRange)

'根据参数wParam指定的字符位置返回该字符所在的行号
    CurRow = SendMessage(TextControl.hWnd, EM_LINEFROMCHAR, SelRange.cpMin, 0)

'取得指定行第一个字符的位置
    LineIndex = SendMessage(TextControl.hWnd, EM_LINEINDEX, CurRow, 0)

If SelRange.cpMin = LineIndex Then
        GetCurPos.x = 1
    Else

TempStr = String$(SelRange.cpMin - LineIndex, 13)

'复制当前行开始到选择文本开始的文本
        CopyMemory ByVal StrPtr(TempStr), ByVal StrPtr(TempArray) + LineIndex, SelRange.cpMin - LineIndex
        TempArray = TempStr

'删除无用的信息
        ReDim Preserve TempArray(SelRange.cpMin - LineIndex - 1)

'转换为 Unicode
        TempStr = StrConv(TempArray, vbUnicode)

GetCurPos.x = Len(TempStr) + 1
    End If
    GetCurPos.y = CurRow + 1
End Function

摘自:网络整理


相关文章参考:


★VB查找替代字符串的函数

★VB换行气泡提示类

★VB/VBA通用路径选择对话框

★ASCII码表0-255完整版 附详细注释

★VB的KeyAscii

★VB取得TextBox、RichTextBox光标所在的行和列(支持汉字)

★VB取得TextBox、RichTextBox光标所在的行和列(支持汉字)

★VB如何实现Undo(撤消)功能

★VB计算文本文件的行数

★VB获取快捷方式原文件路径

★微软 Small Basic 简体中文版 已经发布了

★VB操作Excel 非常详细 [网摘]

★VB如何判断文件正被占用/已被打开

★VB添加listbox 的水平卷动轴

★VB打开资源管理器并指定文件

★VB根据窗体自动调整窗体内控件大小 注:实用,可以直接引用

★VB中的指针技术

★Visual Basic编程常见问题及解答(1)

★Visual Basic编程常见问题及解答(2)

★Visual Basic编程常见问题及解答(3)

★VisualBasic变量、常数和数据类型及过程概述

★VB6的后期绑定和前期绑定

★VB用户控件制作讲解与实例

★VB制作OCX控件的步骤

★VB中FSO的调用的两种方法

★用VB操作EXCEL

★VB判断文件及目录的存在性

★VB网站(最新、经典源代码、技术文章、基础知识)

★VB得到指定文件夹下的文件列表

★用VB产生随机任意大小文件挤满硬盘

★VB文件的读写操作

★VB创建超链接 打开指定网站的几种方法

★VB 源码 删除重复行程序 函数

★VB 计算自己程序段所用时间

★VB 获取路径名各部分 (获取文件路径,获取文件名,获取文件扩展名)自编

★几行VB代码拿下注册表

★VB 在浏览器中打开指定网址

★VB窗口置顶

★vb在 ListBox 之中点击右键弹出菜单

更多精彩>>>

VB取得TextBox、RichTextBox光标所在的行和列(支持汉字)相关推荐

  1. VB 获取光标在TextBox、RichTextBox中所在的位置

    '支持中文,一个汉字算一列 Option Explicit Public Const WM_USER = &H400 Public Const EM_EXGETSEL = WM_USER + ...

  2. c语言二维数组行和列怎么看,二维数组行列怎么看

    c语言中如何获取一个二维数组的行列数? 有两种方式: 1 二维数组的行列数在定义的时候就是确定好的,所以编程人员是知道二维数组的大小以及行列数的. 所以可以直接使用行列数的值. 为方便维护,可以将行列 ...

  3. excel表格行列显示十字定位_EXCEL中如何设置点击任意一个单元格出现一个十字架标明行和列...

    在Excel中,为了增强活动单元格的对比性,有时候我们常常需要修改其背景颜色.字体.字号等,用来区分和其它单元格的对比! 本教程,让我们一起来学习,如何让Excel活动单元格所在行和列都着上背景颜色, ...

  4. linux中设置gvim高亮光标所在行和所在列

    使用vim在写东西的时候,要经常移动光标,但是光标太小了,跳 来跳去有时候不知道跳都什么地方去了,所以如果可以高亮光标所 在的行列,这样不管光标怎么移动都能轻松的找到,是不是很cool. 基本设置 设 ...

  5. VB 提取TextBox 文本框中指定一行字符串

    这是使用EM_GETLINE message来做,比较奇特的是lParam是指向一个字串所在的位置, 但是该字串传入时,前两个Byte要存该字串允许的最大长度. '以下在Form需一个TextBox, ...

  6. 复制当前光标所在单词句子

    yaw和yas:复制一个词和复制一个句子,即使光标不在词首和句首也没关系 1.1 Vim的几种模式 正常模式:可以使用快捷键命令,或按:输入命令行. 插入模式:可以输入文本,在正常模式下,按i.a.o ...

  7. C#开发高亮语法编辑器(一)——TextBox ,RichTextBox

    C#简单实现高亮语法编辑器(一)          --TextBox ,RichTextBox的局限性 一.RichTextBox基本设置 二.实现语法高亮 三.关键字提示 四.实现行号 就简单快速 ...

  8. 回车无法直接提交当前光标所在控件中的数据

    状况:在登陆框输入用户名密码后直接回车,页面是刷新了,但按此操作不论刷新多少次,SESSION都无法取到值,也就无法登陆系统 原因及解决方式: 在ASP中,回车键会自动提交当前光标所在控件所属的FOR ...

  9. MFC获取键盘光标和鼠标光标所在控件的ID

    键盘光标:     CWnd *pWnd = GetFocus();     if (pWnd == NULL)      ;//no focus      else      nID = pWnd- ...

最新文章

  1. Spring Cloud Alibaba 高级特性 分布式事务:Alibaba Seata 如何实现分布式事务
  2. input框的内容变化监听
  3. PAT甲级1017 Queueing at Bank:[C++题解]字符串、结构体、最小堆
  4. Kaggle 数据挖掘比赛经验分享 (转载)
  5. 树莓派python教程_两个简易的树莓派初学者Python程序
  6. lua执行shell命令6_tolua_runtime 集成 lua-protobuf 第三方pb3解析库
  7. php strtoupper 和 array_change_key_case 字符串转大写,小写
  8. 云网管—云上构建网络自动化体系
  9. Chrome截图扩展程序-“截图快手”
  10. python语言结构化语言_如何在python中处理结构化语言文件
  11. linux摄像头 自动对焦,基于H3在Linux下驱动OV5640摄像头的方法与流程
  12. 关于Win2003下ASP无故停止
  13. jsf集成spring_JSF Spring Hibernate集成示例教程
  14. 绘制半透明矩形Gdiplus和GDI性能对比
  15. C语言写程序注意,单片机C语言编程应注意的若干问题
  16. 解决Hash冲突的两种策略
  17. win7远程桌面连接 简易教程
  18. 修改NPM的默认安装路径
  19. android的app图标大全,安卓app图标
  20. 【抽奖】RT-Thread Logo升级 | 新起点,“青”装上阵

热门文章

  1. 终于有人把 5G 和边缘计算的关系说清楚了! | 技术头条
  2. 惊慌 Android!使用 3D 打印的头像可破解多款手机
  3. 但见苹果笑,那闻三星哭
  4. 21 年前濒临倒闭的苹果是如何做到今天万亿市值的?
  5. 微软发布 Windows 命令行参考文档,涵盖超 250 项控制台命令
  6. 腾讯“立知”被指抄袭“即刻” APP,目前已被下线
  7. C 和 C ++ 再活 45 年不是梦
  8. JavaScript 年度调查报告:React、Vue 和 Angular 三分天下,谁将在 2018 年独占鳌头?
  9. 满满的干货!mysql技术介绍
  10. html form 返回的数据类型,HTML表单