2011-07-15 27 views
2

我想在單行wx.textctrl中強調一些特定的單詞。我通過使用GetTextExtent計算控件中的單詞位置並使用wx.ClintDC繪製線條來完成此操作。如何獲得實際顯示在wx.TextCtrl中的字符?

我的問題開始於TextCtrl中的文本長於控件的大小,例如,如果用戶輸入〜100個字符,他只能看到最後20個字符,如果控件不夠長。

我的問題是:我怎麼能得到一個實際顯示在單行控制中的字符串?或者我該如何計算不顯示的文字寬度(左側),以像素爲單位?

單行文本控件沒有滾動條。 GetInsertionPoint返回文本中插入符號的位置,但不可能將其轉換爲距離控件左邊框的實際距離(以像素爲單位)。

我不想使用TE_RICH或TE_RICH2樣式而不是StyledTextCtrl類,因爲它們不支持從右向左的文本。

回答

0

好吧,我已經找到了解決辦法是:

from win32api import SendMessage 
result = SendMessage(self.GetHandle(), EM_POSFROMCHAR, 0, 0) 

結果是在控制的第一個字符的客戶座標。如果指定的字符未顯示在編輯控件的客戶區中,則該值爲負值。

0

我認爲你必須使用其中一種TE_RICH風格在wx.TextCtrl中加下劃線。你嘗試過StyledText控件嗎?他們使用閃爍體可能會給你更多的控制權。

還有ExpandoTextCtrl,它會隨着用戶的輸入而擴展。

此外,如果你設置的語言環境,你應該得到的從右到左自動的行爲:http://wiki.wxpython.org/Internationalization#Switching_between_Left_to_Right_and_Right_to_Left_Languages

我實在不明白,只是搶可見字符串的一部分的方法。您必須使用字體的寬度來計算它,並且可能使用文本控件的選擇方法。您可能還想交叉發送到wxPython郵件列表。他們也可能有想法。

+0

謝謝,但正如我寫的,TE_RICH,TE_RICH2和StyledTextCtrl類不支持RTL文本AFAIK。 Ans我不想改變我的應用程序的佈局,只是讓它們在某些控件中輸入RTL文本。 –

+0

您是否嘗試使用富控件或StyledTextCtrl的SetLayoutDirection()來查看它是否工作?你不必改變你的程序。只需寫一個快速的一次性檢查。 –

+0

Scintilla目前在LTR文本和指標的RTL文本顯示方面存在問題(特別是如果組合了RTL和LTR)。 –

相關問題