获取Delphi TEdit中单词的像素坐标

时间:2012-09-23 17:42:53

标签: delphi

问候互联网的集体奇迹。

我试图强调TEdit中的特定单词(实际上是来自Berg NextSuite的TNxEdit - 但它是TEdit的衍生物)。但是为了做到这一点,我需要知道所述单词的像素坐标。

如果文本的开头是可见的,这很容易做到,但是如果文本的开头已经滚动到底,我就无法理解如何做到这一点。

有没有办法直接确定给定单词的确切坐标?如果不这样做,确定哪些文字在编辑中可见,哪些不是?或者其他一些巧妙的方法。

Edit1:要涵盖目前的一些答案:

要求是在TNxGrid组件的列上实现拼写检查,这将我限制为TNxEdit。如果我可以选择我使用的组件,我现在就会切换:(

我可以画线。 TNxEdit有一个画布,允许我非常愉快地绘制下划线,只要我能找到正确的坐标。

如果编辑文本的开头是可见的,即前面没有滚动,那么我可以使用TextExtent确定正确的起始位置和线的长度。

问题出现在文本开头从前面滚动的情况中。无法确定从前面滚动多少意味着我无法计算出线的起始位置。如果我要突出显示的单词也部分滚动,则行的长度会成为问题。

2 个答案:

答案 0 :(得分:8)

尝试使用(发送消息)EM_POSFROMCHAR获取文本特定部分的坐标。例如:

pPoint: TPoint;
SendMessage(Wnd, EM_POSFROMCHAR, WPARAM(@pPoint), charIndex);

但请记住,强调下划线很可能需要您对控件进行子类化并实现自定义绘制。因此@GolesTrol所做的建议值得一试,即尝试从已支持所需功能的现有控件中进行选择。

答案 1 :(得分:-1)

TEdit是系统Win32 Edit类的Delphi包装器,它没有提供任何函数来设置特定单词的下划线属性,TEdit也没有添加这样的功能。我建议你考虑在Delphi中使用更强大的类组件TRichEdit 说,如果你想面对复杂的任务,尝试计算字符串范围给定一个字体(参见GetTextExtentExPoint和类似)来获取该行的x开始/结束位置,(也考虑编辑的边框添加一些x偏移)和在HDC(TCanvas)上画一条线