这是一段别人的代码,有几个地方我没看懂,希望高手能给我一点指点!  
 
Option  Explicit  
Private  Declare  Function  SendMessageLong  Lib  "user32"  Alias  "SendMessageA"  _  
(ByVal  hwnd  As  Long,  ByVal  wMsg  As  Long,  ByVal  wParam  As  Long,  ByVal  lParam  As  Long)  As  Long  
 
Const  EM_LINEFROMCHAR  =  &HC9  
 
Public  Function  LineNo(hwnd  As  Long)  As  Long  
On  Local  Error  Resume  Next  
LineNo  =  SendMessageLong(hwnd,  EM_LINEFROMCHAR,  -1&,  0&)  +  1    
rem:为什么可以用函数名接受另外一个函数的输出  
LineNo  =  Format$(LineNo,  "##,###")  
End  Function  
 
Private  Sub  Text1_Change()  
Label1  =  LineNo(Text1.hwnd)  
End  Sub  
 
Private  Sub  Text1_Click()  
Label1  =  LineNo(Text1.hwnd)  
End  Sub  
 
Private  Sub  Text1_KeyPress(KeyAscii  As  Integer)  
Label1  =  LineNo(Text1.hwnd)  
End  Sub  
 
这个函数的并不能很完美地显示出来!只能显示行,看不到列!

解决方案 »

  1.   

    在Function中,"函数名="也就是函数的返回值,可以是任意表达式,只要类型正确,当然也可以是其他函数的输出。
      

  2.   

    试试这个,可以获得行和列:Option Explicit
      
    Const EM_GETSEL = &HB0
    Const EM_LINEFROMCHAR = &HC9
    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
      
    Public Sub GetCaretPos(ByVal TextHwnd As Long, LineNo As Long, ColNo As Long)
      
    Dim I As Long, j As Long
    Dim lParam As Long, wParam As Long
    Dim k As Long
      
    '首先向文本框传递EM_GETSEL消息以获取从起始位置到
    '光标所在位置的字符数
      
    I = SendMessage(TextHwnd, EM_GETSEL, wParam, lParam)
    j = I / 2 ^ 16
      
    '再向文本框传递EM_LINEFROMCHAR消息根据获得的字符
    '数确定光标以获取所在行数
      
    LineNo = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, 0)
    LineNo = LineNo + 1
      
    '向文本框传递EM_LINEINDEX消息以获取所在列数
      
    k = SendMessage(TextHwnd, EM_LINEINDEX, -1, 0)
    ColNo = j - k + 1
    End Sub
      
    Private Sub Form_Load()
    Dim LineNo As Long, ColNo   As Long
      
    Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
    Label1.Caption = LineNo
    Label2.Caption = ColNo
    End Sub
      
    Private Sub Form_Resize()
    Text1.Width = Me.ScaleWidth
    End Sub
      
    Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim LineNo As Long, ColNo   As Long
      
    Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
    Label1.Caption = LineNo
    Label2.Caption = ColNo
    End Sub
      
    Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim LineNo As Long, ColNo   As Long
      
    Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
    Label1.Caption = LineNo
    Label2.Caption = ColNo
    End Sub