2017-07-01 6 views
1

Ich verwende SCI_GETFIRSTVISIBLELINE von Scintilla, um die erste angezeigte Zeile des Dokuments zu erhalten.Wie wird die erste angezeigte Zeilennummer angezeigt, wenn der Zeilenumbruch aktiviert ist?

Jetzt habe ich den Word-Wrapping-Modus durch Setzen von SCI_SETWRAPMODE auf SC_WRAP_WORD aktiviert. Aber SCI_GETFIRSTVISIBLELINE stimmt nicht mehr mit der Belegzeile überein.

Gibt es eine Möglichkeit, die erste angezeigte Dokumentzeile zu erhalten (auch, wie man erkennt, ob die angezeigte Zeile Teil einer umbrochenen Zeile ist)? Scintilla selbst weiß es, da die korrekte Zeilennummer vor dem Text angezeigt wird (bei Aktivierung SC_MARGIN_NUMBER).

aktualisieren: Die erste Dokument Linie der sichtbaren Linie kann durch den Aufruf SCI_DOCLINEFROMVISIBLE mit dem Ergebnis der SCI_GETFIRSTVISIBLELINE bekommen sein. Das Erkennen von Teillinien ist jedoch immer noch ein Problem.

Antwort

1

kann die entsprechende Belegzeile der ersten sichtbaren Zeile durch SCI_DOCLINEFROMVISIBLE mit dem Ergebnis der SCI_GETFIRSTVISIBLELINE Aufruf erhalten werden: DOCLINEFROMVISIBLE(GETFIRSTVISIBLELINE())

Der zweite Teil ist ein wenig komplizierter und scheint ein wenig hacky zu mir:

Erste , Rufe ich SCI_WRAPCOUNT mit der Belegzeilennummer der ersten Zeile an und erhalte die Anzahl der Zeilen, die diese Zeile verwendet. Wenn SCI_WRAPCOUNT()>1 ist es ein Kandidat für eine teilweise Linie. Die Anzahl der übersprungenen Zeilen kann mit SCI_DOCLINEFROMVISIBLE(SCI_GETFIRSTVISIBLELINE() + SCI_WRAPCOUNT() - 1) - SCI_DOCLINEFROMVISIBLE(SCI_GETFIRSTVISIBLELINE()) berechnet werden.

Verwandte Themen