wxPython styledtextctrl: как получить количество видимых строк с включенным переносом слов?

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

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

wxPython - StyledTextCtrl получает текущие видимые строки

Получить видимые строки в компоненте Scintilla.NET

Второй, если для С#, но, поскольку база все еще сцинтилла, я подумал, что это актуально.

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

LinesOnScreen()

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


person Chris Beaulieu    schedule 13.07.2016    source источник


Ответы (1)


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

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

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

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

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

person ekhumoro    schedule 13.07.2016
comment
Вы правы, хотя я не знал, что есть отдельный термин специально для этого. Я уверен, что это где-то в блестящем документе, я, вероятно, просто не заметил его. Что касается моих потребностей, мне не требуется очень точное решение, поэтому то, что вы разместили здесь, даст мне более чем достаточно информации, чтобы сделать то, что мне нужно. Спасибо за ответ. - person Chris Beaulieu; 14.07.2016