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

я использую SCI_GETFIRSTVISIBLELINE Сцинтиллы, чтобы получить первую отображаемую строку документа.

Теперь я включил режим переноса слов, установив SCI_SETWRAPMODE в SC_WRAP_WORD, Но SCI_GETFIRSTVISIBLELINE больше не соответствует строке документа.

Есть ли способ получить первую отображаемую строку документа (также как узнать, является ли отображаемая строка частью обернутой строки)? Сам Scintilla это знает, так как перед текстом отображается правильный номер строки (при включении SC_MARGIN_NUMBER).

Обновить: Первую строку документа видимой строки можно получить, вызвав SCI_DOCLINEFROMVISIBLE с результатом SCI_GETFIRSTVISIBLELINE, Однако обнаружение частичных линий все еще является проблемой.

1

Решение

Соответствующую строку документа первой видимой строки можно получить, вызвав SCI_DOCLINEFROMVISIBLE с результатом SCI_GETFIRSTVISIBLELINE: DOCLINEFROMVISIBLE(GETFIRSTVISIBLELINE())

Вторая часть немного сложнее и кажется мне немного хакерской:

Во-первых, я звоню SCI_WRAPCOUNT с номером строки документа первой строки и получите количество строк, которые использует эта строка. Если SCI_WRAPCOUNT()>1 это кандидат на частичную линию. Количество пропущенных строк можно рассчитать с помощью SCI_DOCLINEFROMVISIBLE(SCI_GETFIRSTVISIBLELINE() + SCI_WRAPCOUNT() - 1) - SCI_DOCLINEFROMVISIBLE(SCI_GETFIRSTVISIBLELINE()),

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]