In vielen Fällen wäre es schön, wenn eine Multiline-Textbox oder auch die RichTextbox entsprechende Eigenschaften für das Auslesen der aktuellen Zeilen- und Spaltenposition bereitstellen würden. Da es solche Eigenschaften aber nicht gibt, bedienen wir uns wieder einmal der Windows-API - wie soll's auch anders sein ' zunächst die benötigten API-Deklarationen Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Const EM_LINEFROMCHAR = &HC9 Private Const EM_LINEINDEX = &HBBMit Hilfe der SendMessage-Methode ist es nun wirklich ganz einfach, sowohl die aktuelle Zeilennummer, als auch die Spalte innerhalb dieser Zeile zu ermitteln. Ermitteln der aktuellen Zeile ' Zeilennummer der aktuellen Eingabeposition ermitteln Public Function GetCurrentLine(hWnd As Long) As Long GetCurrentLine = SendMessage(hwnd, EM_LINEFROMCHAR, _ -1, ByVal 0&) + 1 End Function Ermitteln der aktuellen Spalte innerhalb der aktuellen Zeile ' Spaltennummer der aktuellen Zeile ermitteln Public Function GetCurrentCol(TextBox As Control) As Long GetCurrentCol = TextBox.SelStart - _ SendMessage(TextBox.hWnd, EM_LINEINDEX, _ GetCurrentLine(TextBox.hWnd) - 1, 0&) + 1 End Function Beispiel... ...bei Verwendung einer RichTextBox Private Sub RichTextBox1_SelChange() lblPosition.Caption = "Zeile " & _ GetCurrentLine(RichTextBox1.hWnd) & ", Spalte " & _ GetCurrentCol(RichTextBox1) End Sub ...bei Verwendung einer Standard-Textbox Private Sub Text1_KeyUp(KeyCode As Integer, _ Shift As Integer) lblPosition.Caption = "Zeile " & _ GetCurrentLine(Text1.hWnd) & ", Spalte " & _ GetCurrentCol(Text1) End Sub Private Sub Text1_MouseUp(Button As Integer, _ Shift As Integer, X As Single, Y As Single) lblPosition.Caption = "Zeile " & _ GetCurrentLine(Text1.hWnd) & ", Spalte " & _ GetCurrentCol(Text1) End Sub |