想在TTreeView的Node上面的文字上面取单词,又不想用钩子,怎么办? ( 积分: 100 )

  • 主题发起人 主题发起人 wind73
  • 开始时间 开始时间
W

wind73

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用一个TTreeView控件,<br>想通过点击或者鼠标移到某一条Node后,得到该鼠标下面对应的单词文本内容。<br>查询了以前的内容,<br>大多数都是用钩子之类进行屏幕取词,比较高深,也觉得杀鸡用牛刀,<br>好像对于TCtrol继承的才可以用EM_CHARFROMPOS发消息,然后得到单词,比如RichEdit或者Edit,<br>但是对应TTreeView,只有TreeView继承TCtrol,Node没有,<br>通过pos:=SendMessage(rchedit.Handle, EM_CHARFROMPOS, 0, MAKELPARAM(X,Y));<br>发送消息,发现返回值总是为0,<br>问题:<br>1、为什么会这样?同样的代码在Edit里面工作是正常的,但是在TTreeView里面总是为0?<br>2、如果可以在鼠标移动或者点击某一个Node时候得到该鼠标对应的单词?能否给出示例代码?<br>新手一个,自己分不多,只敢给100分,<br>希望各位DX不要嫌少,谢谢!
 
我使用一个TTreeView控件,<br>想通过点击或者鼠标移到某一条Node后,得到该鼠标下面对应的单词文本内容。<br>查询了以前的内容,<br>大多数都是用钩子之类进行屏幕取词,比较高深,也觉得杀鸡用牛刀,<br>好像对于TCtrol继承的才可以用EM_CHARFROMPOS发消息,然后得到单词,比如RichEdit或者Edit,<br>但是对应TTreeView,只有TreeView继承TCtrol,Node没有,<br>通过pos:=SendMessage(rchedit.Handle, EM_CHARFROMPOS, 0, MAKELPARAM(X,Y));<br>发送消息,发现返回值总是为0,<br>问题:<br>1、为什么会这样?同样的代码在Edit里面工作是正常的,但是在TTreeView里面总是为0?<br>2、如果可以在鼠标移动或者点击某一个Node时候得到该鼠标对应的单词?能否给出示例代码?<br>新手一个,自己分不多,只敢给100分,<br>希望各位DX不要嫌少,谢谢!
 
up一下
 
procedure TForm1.TreeView1Click(Sender: TObject);<br>begin<br> &nbsp;TreeView1.Hint := (Sender AS TTreeView).Selected.Text;<br>end;
 
老大,可能我没有说清楚,<br>你这样是拿到的Node对应的文本而不是鼠标下面对应的文本,<br>比如如果Node里面的文本有:&quot;I have a dream&quot;<br>如果鼠标放在have上面,就得到的是have,放在dream上面得到的是dream,<br>而不是&quot;I have a dream&quot;
 
=^0^= 使用这个:<br><br>procedure TForm1.Timer1Timer(Sender: TObject);<br>var<br> &nbsp;cNode: TTreeNode;<br> &nbsp;cPoint: TPoint;<br>begin<br> &nbsp;cPoint := Mouse.CursorPos;<br> &nbsp;cPoint := TreeView1.ScreenToClient(cPoint);<br> &nbsp;cNode := TreeView1.GetNodeAt(cPoint.X, cPoint.Y);<br> &nbsp;if Assigned(cNode) then<br> &nbsp; &nbsp;Caption := cNode.Text;<br>end;
 
GetNodeAt只能拿到当前Node,然后用Node.Text拿到当前Node的Text,<br>不能拿到Node.Text里面的某个单词啊
 
得到Node.Text之后,可以用Canvas.TextWidth得到一段字符的长度,折半寻找
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
790
import
I
I
回复
0
查看
551
import
I
后退
顶部