Am 15.09.2023 um 17:21 schrieb Wendelin Uez:
Hier noch einmal die dokumentierte Version, damit Du siehst,
worum es geht:
' Liefert die logische Position des Cursors
Public Function CurrentCol() As Long
Dim lSel As Long ' Selektiertes Zeichen
Dim lRow As Long ' Zeile in der das Zeichen liegt
Dim lCol As Long ' Erste Spalte der zeile
Dim lPos As Long ' Errechnete logische Position der spalte
Dim i As Long
Call SendMessage(m_RTF.hwnd, EM_GETSEL, 0&, lSel) '
Position der Spalte im Dokument
lRow = SendMessage(m_RTF.hwnd, EM_LINEFROMCHAR, lSel, 0&) ' Zeile
in der die Spalte liegt
lCol = SendMessage(m_RTF.hwnd, EM_LINEINDEX, lRow, 0&) + 1 ' Erste
Spalte der Zeile
lPos = 0
' Zeile bis zur aktuellen Position durchlaufen
For i = lCol To lSel
' Prüfe ob das aktukelle Zeichen ein Tab ist
If Mid$(m_RTF.Text, i, 1) = vbTab Then
' Wenn ja, Anzahl Zeichen bis zum nächsten Tab berechnen
lPos = lPos + (m_TabWidth - (lPos Mod m_TabWidth))
Else
' Ein normales Zeichen
lPos = lPos + 1
End If
Next i
' Logische Position des Cursors
CurrentCol = lPos + 1
End Function