2016-07-13 3 views
1

Я пытаюсь определить количество строк, отображаемых на экране, в wxPython styledtextctrl с включенной переносом слов.wxPython styledtextctrl: Как получить число видимых строк с включением слов?

Я видел несколько ответов на видимых линий здесь:

wxPython - StyledTextCtrl get currently visible lines

Get visible lines in Scintilla.NET component

Второй один, если для C#, но так как база до сих пор SCINTILLA я думал, что это было уместным.

Проблема с этими решениями заключается в том, что они дают строки, они делают это, предполагая, что перенос слов не включен. Если он включен, и некоторые из линий обернуты, то следующая функция крупица возвращает значение, если упаковка не были включены:

LinesOnScreen() 

Так что мой вопрос, есть ли способ, чтобы получить количество строк на экран при условии, что перенос слов включен?

ответ

1

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

Как вы уже обнаружили, LinesOnScreen() предоставит количество видимых дисплея линий. Но в настоящее время нет встроенного средства для получения количества видимых строк , поэтому его нужно будет рассчитать.

Полное решение может быть довольно сложным, особенно если вам нужно учитывать такие вещи, как сложение строк и аннотации. Но очень базисное решение будет идти-то вроде этого:

index = editor.GetFirstVisibleLine() 
    lines = editor.LinesOnScreen() + index 
    count = 0 
    while index < lines: 
     index += editor.WrapCount(index) 
     count += 1 

Но обратите внимание, что это не попытка справиться с частичными линиями в верхней и нижней части экрана (которая остается в качестве упражнения для читателя).

+0

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

Смежные вопросы