用Delphi读取鼠标所在位置单词
?牐牫绦虻墓丶谟谛枰蛭谋究虼菹N_CHARFROMPOS。该消息用于读取当前鼠标位于文本框的第几行第几列上。在发送该消息时,参数wParam没有作用;参数lParam为长整型,用于指定鼠标的坐标位置,其中两个高字节指定Y,两个低字节指定X。返回值为长整型,其中两个高字节指定鼠标位于第几个字符上,两个低字节指定鼠标位于第几个列上。
?牐牫绦虼肴缦拢?
?牐爑nit Unit1;??
?牐爄nterface
?牐爑ses
?牐燱indows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,
?牐燬tdCtrls;??
?牐爐ype
?牐燭Form1 = class(TForm)??
?牐燤emo1:TMemo;??
?牐爌rocedure Memo1MouseDown(Sender:TObject;Button:TMouseButton;??
?牐燬hift:TShiftState;X,Y:Integer);?牔?
?牐爌rocedure FormCreate(Sender:TOb—ject);?牔?
?牐爌rivate
?牐? {Private declarations} ??
?牐爌ublic
?牐燜unction IsSeparetor(ch:Char):Boolean;??
?牐燜unction GetWord(pos:Word):String;??
?牐爗Public declarations}??
?牐爀nd;??
?牐爒ar
?牐燜orm1:TForm1;??
?牐爄mplementation
?牐? {$R*.DFM}??
?牐? {函数IsSparetor用于判定一个字符是否为分隔符}
?牐燜unction TForm1.IsSeparetor(ch:Char):Boolean;
?牐燽egin
?牐營sSeparetor:= False; ??
?牐營f ch in[' ',', '.','?',#10,#13]then
?牐營sSeparetor:= True
?牐燛nd;??
?牐爗函数GetWord用于读取鼠标所在位置的单词}??
?牐燜unction TForm1.GetWord(pos:Word):String;??
?牐爒ar
?牐爏t:string;pos1,pos2:Word;??
?牐爄:Longint;w:string;??
?牐燽egin
?牐爓:='':pos1:= 1;getword:='';??
?牐? {读取文本框中的内容及文本长度}
?牐爏t:=Memo1.Lines.Text ;??
?牐爌os2:= length(st)?牔?
?牐? {向前搜寻当前单词的起始位置}??
?牐燜or i:= pos - 1 downTo 1 do
?牐營f IsSeparetor(st[i])Then
?牐燽egin
?牐爌os1:= i + 1;break
?牐爀nd;??
?牐? {向后搜寻当前单词的结束位置}??
?牐燜or i:= pos To pos2 do
?牐營f IsSeparetor(st[i])Then
?牐燽egin
?牐爌os2:= i - 1; break
?牐爀nd;
?牐? {截取pos1-pos2间的字符,以构成一个单词}
?牐爄f pos1<=pos2 then
?牐燽egin
?牐燜or i:= pos1 To pos2 do
?牐爓:=w+st[i];?牔?
?牐燝etWord:= '单词:'+w
?牐爀nd
?牐燛nd; ??
?牐爌rocedure TForm1.Memo1MouseDown(Sender:TObject;Button:TMouseButton;??
?牐燬hift:TShiftState;X,Y:Integer);?牔?
?牐爒ar
?牐爈c:Longint;CharPos:Word;??
?牐燽egin
?牐? {向文本框传递消息EN_CHARFROMPOS}
?牐爈c:= SendMessage(Memo1.handle,EM_CHARFROMPOS,0,x+(y shl 16));?牐牐? {取得鼠标位于第几个字符上}??
?牐燙harPos:=Word(lc)
?牐爗显示我们所点取的单词}??
?牐燤emo1.Hint:= GetWord(CharPos)??
?牐爀nd;??
?牐爌rocedure TForm1.FormCreate(Sender.TObject);?牔?
?牐燽egin
?牐燤emo1.ShowHint:=True
?牐爀nd;
?牐爀nd.
?牐犚陨洗朐赪indows 98、Delphi 5.0环境下调试通过。