Option Explicit

原创 2007年10月16日 00:52:00

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

 

从 Option Explicit 开始的零碎知识点(一)

这两天一直在围着 Visual Basic 转,敲了一些例子,记录了一些零碎的知识点,自己都觉得自己有点小幼稚,不过还好啦,至少没有放弃!      Option Explicit '定义变量X D...
  • u010282984
  • u010282984
  • 2016年01月26日 22:13
  • 809

Option Explicit语句的重要性

本文章摘自《VBScript程序员参考手册》第81-82页   尽管这三个变量都没有显式的生命,但VBScript并不在意。这段代码能正常的执行,最终会出现一个对话框并显示数字3。这似乎...
  • tiantuanzi
  • tiantuanzi
  • 2015年10月14日 17:11
  • 557

从 Option Explicit 开始的零碎知识点

这两天一直在围着 Visual Basic 转,敲了一些例子,记录了一些零碎的知识点,自己都觉得自己有点小幼稚,不过还好啦,至少没有放弃!     Option Explicit '定义变量X D...
  • u010007868
  • u010007868
  • 2016年01月26日 22:09
  • 71

C++中的explicit关键字介绍

C++中的explicit关键字介绍
  • fengbingchun
  • fengbingchun
  • 2016年04月16日 16:31
  • 6404

从 Option Explicit 开始的零碎知识点(二)

每次开始敲一页代码的时候,经常会遇到“定义”这个东西 Option Explicit,今天在写程序的时候碰到了一个不需要“Option Explicit”直接定义的,如下: Option Expl...
  • u010282984
  • u010282984
  • 2016年01月27日 21:56
  • 561

C++中explicit关键字的作用

转自:http://www.cnblogs.com/winnersun/archive/2011/07/16/2108440.htmlexplicitexplicit用来防止由构造函数定义的隐式转换。...
  • y396397735
  • y396397735
  • 2016年02月26日 22:35
  • 661

C++ explicit关键字详解

首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数...
  • atpccb
  • atpccb
  • 2017年02月06日 09:54
  • 527

深入理解C++中的explicit关键字

深入理解C++中的explicit关键字, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是impl...
  • kezunhai
  • kezunhai
  • 2014年08月07日 14:07
  • 1429

C#之自定义的implicit和explicit转换

在类型转换时常会遇到隐式转换和显式转换。那我们自定义的类型要如何去定义隐式转换和显式转换?我们来看一段代码 public class Rational { private In...
  • xxdddail
  • xxdddail
  • 2014年07月23日 09:20
  • 2359

关于QT/C++中explicit关键字和构造函数的*parent参数的简单说明

一、explicit关键字 1.   explicit是C++中的关键字,不是C语言中的,英文直译是“明确的”、“显式的”意思。 2. 出现这个关键字的原因,是在C++中有这样规定的基础上: 当定义...
  • fengel_cs
  • fengel_cs
  • 2015年03月04日 17:32
  • 770
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Option Explicit
举报原因:
原因补充:

(最多只允许输入30个字)