我试图在单行wx.textctrl中强调一些特定的单词。我是通过使用GetTextExtent计算控件中单词的位置并使用wx.ClintDC绘制线来完成的。
当TextCtrl中的文本比控件的大小长时,我的问题就开始了,例如,如果用户输入~100个字符,如果控件不够长,他只能看到20个最后一个字符。
我的问题是:如何获得实际显示在单行控件中的字符串?或者如何计算未显示的文本宽度(在左侧),以像素为单位?
单行文本控件没有滚动条。 GetInsertionPoint在文本中返回插入符号的位置,但是无法将其转换为距离控件左边界的实际距离(以像素为单位)。
我不想使用TE_RICH或TE_RICH2样式而不是StyledTextCtrl类,因为它们不支持从右到左的文本。
答案 0 :(得分:0)
我认为你必须使用TE_RICH样式中的一个来为wx.TextCtrl中的文本加下划线。你试过StyledText控件吗?他们使用可能会给你更多控制的scintilla。
还有ExpandoTextCtrl,它将随着用户类型的扩展而扩展。
此外,如果您设置了区域设置,则应自动获得从右到左的行为:http://wiki.wxpython.org/Internationalization#Switching_between_Left_to_Right_and_Right_to_Left_Languages
我真的没有看到只抓取可见字符串部分的方法。您必须使用字体的宽度计算它,并且可能使用文本控件的Selection方法。您可能也希望交叉发布到wxPython邮件列表。他们可能也有想法。
答案 1 :(得分:0)
好的,我找到的解决方案是:
from win32api import SendMessage
result = SendMessage(self.GetHandle(), EM_POSFROMCHAR, 0, 0)
result是控件中第一个字符的客户端坐标。如果指定的字符未显示在编辑控件的客户区中,则该值为负。