×

VB编程技巧集

消耗积分:10 | 格式:rar | 大小:34 | 2010-02-06

王静

分享资料个

TextBox模拟拖曳选取文字
 我们知道Rich text或Word 或VB的程式撰写环境,可以将Mouse移到Select起来的文字 按Mouse左键做拖曳移动的功能,後来想,TextBox能不能做呢?这可真的吃了不少苦头
,这个程式模拟其做法,但主要的精神是在於对TextBox的了解。
 首先,TextBox中当选取一段文字之後,我们只要按Mosue,便使Select的区域失效,且 可能进入另外的一个Select域,故第一件事是如何在有Select的区域时,使这动作失效; 的作法是在MouseUp时Check一下有没有选取文字,如果有,就使用SubClass的技术,拦截 Mouse的左键,所以当我们按左键时,不会再有选取文字又不见了的情况。
 第二,我们没有按下Mouse,那如何得知Mouse所在的地方到底是TextBox的哪个字呢,所幸 有EM_CHARFROMPOS这个讯息可Send给textBox,其传回值的HiWord 得该字元是在第几行
 0为base,LowWord是该字元在TextBox中的位置(含换行与LineFeed),因而我们可以单
由MouseMove便得知何时Mouse要是箭号,何时是内定I形的Mouse。当然想得知Mouse所在
可以透过Mouse Event的X, Y座标,但是它们是以Twips为单位,而另外也可以用GetCursorPos() 来得知Mouse的位置,但这是相对於萤幕者,EMCHARFROMPOS的讯息需要的是相对於TextBox 的座标,有许多种方法可以完成这转换,但我选ScreenToClient()这个API,比较直接。
 第叁,Caret如何隐藏呢?使用HideCaret可完成,但这个Function只能呼叫一次以便 下回 ShowCaret()时可以将Caret Show出来,这是因为呼叫2次的HideCaret时,也要呼
 叫2次的ShowCaret才能使Caret出现。另设定Caret的SetCaretPos() API只是令Caret出现在什麽地,但如果您KeyIn任何字时,仍出现在原来之地方,而不是方才设定之处,而
要用EM_SETSEL的Message才能设定KeyIn的位置是Caret的位置。
This file is generated with EtextWizard v1.0 ---written by Fengguohua  of NorthStar  2000-2-25

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !