Как получить символы, которые на самом деле отображаются в wx.TextCtrl? - PullRequest
2 голосов
/ 15 июля 2011

Я пытаюсь подчеркнуть некоторые конкретные слова в одной строке wx.textctrl.Я делаю это путем вычисления положения слова в элементе управления с помощью GetTextExtent и рисования линий с использованием wx.ClintDC.

Моя проблема начинается, когда текст в TextCtrl длиннее, чем размер элемента управления, например, если пользовательский ввод~ 100 символов он может видеть только 20 последних символов, если контроль не достаточно длинный.

Мой вопрос: как мне получить строку, которая фактически отображается в однострочном элементе управления?или как рассчитать ширину текста, который не отображается (слева) в пикселях?

В однострочном текстовом элементе управления нет полосы прокрутки.GetInsertionPoint возвращает позицию каретки в тексте, но невозможно перевести ее на фактическое расстояние в пикселях от левой границы элемента управления.

Я не хочу использовать стили TE_RICH или TE_RICH2, а не класс StyledTextCtrl, потому что онине поддерживает текст справа налево.

Ответы [ 2 ]

0 голосов
/ 19 июля 2011

Хорошо, решение, которое я нашел:

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

результат - клиентские координаты первого символа в элементе управления. Значение является отрицательным, если указанный символ не отображается в клиентской области элемента управления для редактирования.

0 голосов
/ 15 июля 2011

Я думаю, что вы должны использовать один из стилей TE_RICH, чтобы подчеркнуть текст в wx.TextCtrl.Вы пробовали элементы управления StyledText?Они используют сцинтиллы, которые могут дать вам больше контроля.

Существует также ExpandoTextCtrl, который будет расширяться по мере ввода пользователем.

Кроме того, если вы установите локаль, вы должны автоматически получить поведение справа налево: http://wiki.wxpython.org/Internationalization#Switching_between_Left_to_Right_and_Right_to_Left_Languages

Я не вижу метода, позволяющего просто захватить часть строкиэто видноВы должны будете рассчитать его, используя ширину шрифта и, возможно, используя методы выделения текстового элемента управления.Вы можете захотеть сделать кросс-пост в списке рассылки wxPython.Возможно, у них тоже есть идеи.

...