a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 70|回复: 0

[Visual Basic] 在TextBox中如何得知Caret所在位置

[复制链接]
发表于 2012-7-31 22:10:12 | 显示全部楼层 |阅读模式
  在form中放一个textBox两个label
& H* U$ A: h5 s3 K! L) E  Const EM_GETSEL = &HB0
( t5 |7 @2 O5 J! |% \, K  Const EM_LINEFROMCHAR = &HC9' r- r1 i' ^0 d4 l0 y7 y( i
  Const EM_LINEINDEX = &HBB
: v4 `+ ^" C/ }1 I; q4 _  Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _5 }+ a) g5 m0 v0 l7 T1 C' [
  (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _; V: I: ^8 u" e% `# U
  lParam As Any) As Long/ b# W# c5 S) M9 D, v( l: [
  Public Sub GetCaretPos(ByVal hwnd5 As Long, LineNo As Long, ColNo As Long)$ e( Y+ Q/ E  I$ n5 y2 h4 N
  Dim i As Long, j As Long+ Q1 u- ]/ A' J. |6 ~! f$ ~6 D
  Dim lParam As Long, wParam As Long8 f  G; ^$ ?  `5 Z) l
  Dim k As Long7 s& u" h% g) \4 U; q
  i = SendMessage(hwnd5, EM_GETSEL, wParam, lParam)- l; h, d) M; b0 h1 F: }$ `* F* M
  j = i / 2 ^ 16 ’取得目前Caret所在前面有多少个byte, V! b2 o/ L/ t3 l1 ]+ ]7 Z; @
  LineNo = SendMessage(hwnd5, EM_LINEFROMCHAR, j, 0) ’取得前面有多少行
% y8 ?8 B& F, ]9 |  LineNo = LineNo + 1$ D/ l/ }% m2 P
  k = SendMessage(hwnd5, EM_LINEINDEX, -1, 0)
3 K- R; c0 `% Z  e/ |  ’取得目前caret所在行前面有多少个byte8 S. L% N( b! b+ y  ^
  ColNo = j - k + 1/ f- O3 _* C+ R/ {: h
  End Sub9 o  U/ h: L0 w! }$ F( o! T$ ~# E
  Private Sub Form_Load()
5 u0 K( g5 F9 A2 z* s  Dim LineNo As Long, ColNo As Long
" C- @# @8 w$ n  k  Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
6 h% \) E% o% `/ f& w# g1 g0 S2 ~  Label1.Caption = LineNo9 Y& @: W/ ]( @" u
  Label2.Caption = ColNo! [' Z3 p' s9 S. G! f. y& P
  End Sub' f( Q2 _8 C2 c! c/ y( {
  Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
. _* z7 L0 e0 e, g2 ?  Dim LineNo As Long, ColNo As Long
9 E. _. ^" ?9 |  Call GetCaretPos(Text1.hwnd, LineNo, ColNo)
; ~- H6 {% x# v" P4 r8 m! i; S  Label1.Caption = LineNo
+ g/ ]' p: _6 j' W0 _* }# d  Label2.Caption = ColNo
2 j! Q+ V& O9 I6 h+ J6 x  End Sub
/ P5 D9 l, B; H/ O0 p- {  Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)" W0 \  p' r. b, {5 i2 N
  Dim LineNo As Long, ColNo As Long6 N" j3 V& |( \! z  o; j* g
  Call GetCaretPos(Text1.hwnd, LineNo, ColNo)% S7 w' W0 I$ m# E* r" i. ~
  Label1.Caption = LineNo
4 S% b) M6 A/ b5 J2 v) \3 v- X8 J- w. q  Label2.Caption = ColNo4 B( l# U" r+ q  X# G
  End Sub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-18 08:17 , Processed in 0.217501 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表