3

问候互联网的集体奇才。

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

如果文本的开头可见,这很容易做到,但是如果文本的开头已经从结尾滚动,我不知道该怎么做。

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

Edit1:涵盖一些当前的答案:

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

我可以画线。TNxEdit 有一个画布,只要我能计算出正确的坐标,我就可以很高兴地绘制下划线。

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

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

4

2 回答 2

8

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

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

但请记住,下划线很可能需要您对控件进行子类化并实现自定义绘制。所以@GolesTrol 提出的建议是值得的,那就是尝试从已经支持所需功能的现有控件中进行选择。

于 2012-09-23T18:10:06.857 回答
-1

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

于 2012-09-23T18:08:41.353 回答