я использую SCI_GETFIRSTVISIBLELINE
Сцинтиллы, чтобы получить первую отображаемую строку документа.
Теперь я включил режим переноса слов, установив SCI_SETWRAPMODE
в SC_WRAP_WORD
, Но SCI_GETFIRSTVISIBLELINE
больше не соответствует строке документа.
Есть ли способ получить первую отображаемую строку документа (также как узнать, является ли отображаемая строка частью обернутой строки)? Сам Scintilla это знает, так как перед текстом отображается правильный номер строки (при включении SC_MARGIN_NUMBER
).
Обновить: Первую строку документа видимой строки можно получить, вызвав SCI_DOCLINEFROMVISIBLE
с результатом SCI_GETFIRSTVISIBLELINE
, Однако обнаружение частичных линий все еще является проблемой.
Соответствующую строку документа первой видимой строки можно получить, вызвав SCI_DOCLINEFROMVISIBLE
с результатом SCI_GETFIRSTVISIBLELINE
: DOCLINEFROMVISIBLE(GETFIRSTVISIBLELINE())
Вторая часть немного сложнее и кажется мне немного хакерской:
Во-первых, я звоню SCI_WRAPCOUNT
с номером строки документа первой строки и получите количество строк, которые использует эта строка. Если SCI_WRAPCOUNT()>1
это кандидат на частичную линию. Количество пропущенных строк можно рассчитать с помощью SCI_DOCLINEFROMVISIBLE(SCI_GETFIRSTVISIBLELINE() + SCI_WRAPCOUNT() - 1) - SCI_DOCLINEFROMVISIBLE(SCI_GETFIRSTVISIBLELINE())
,
Других решений пока нет …