VB-Homepage Tipp 083

Ermitteln der Cursorposition in Textfeldern

Wenn Sie an einem Projekt arbeiten, das in irgendeiner Form mit einzeiligen oder noch besser mehrzeiligen Textfeldern zu tun hat, dann könnte dieser Tipp für Sie interessant sein.
Sie können hier, für den Benutzer Ihres Programms, eine, z.Bsp. aus Word bekannte Funktionalität, anbieten die ständig die aktuelle Cursorposition im Text anzeigt.

cursrpos.mak
CURSRPOS.FRM
ProjWinSize=152,402,248,215
ProjWinShow=2
Title="CURSRPOS"
ExeName="CURSRPOS.EXE"

curspos.frm
VERSION 2.00
Begin Form Form1
BorderStyle = 3 'Fixed Double
Caption = "Ermitteln der aktuellen Cursorposition in Textfeldern"
ClientHeight = 6105
ClientLeft = 1095
ClientTop = 1485
ClientWidth = 7365
ClipControls = 0 'False
ControlBox = 0 'False
Height = 6510
Left = 1035
LinkTopic = "Form1"
ScaleHeight = 6105
ScaleWidth = 7365
Top = 1140
Width = 7485
Begin CommandButton Command1
Caption = "Ende"
Height = 255
Left = 6360
TabIndex = 6
Top = 5760
Width = 855
End
Begin Timer Timer1
Interval = 10
Left = 6720
Top = 5640
End
Begin TextBox Text1
Height = 5295
Left = 120
MultiLine = -1 'True
TabIndex = 0
Top = 240
Width = 7095
End
Begin Label Label3
Alignment = 1 'Right Justify
Caption = "Die Idee stammt von Jürgen Anke"
Height = 255
Left = 3840
TabIndex = 5
Top = 0
Width = 3495
End
Begin Label Label2
BorderStyle = 1 'Fixed Single
Height = 255
Left = 2160
TabIndex = 2
Top = 5760
Width = 495
End
Begin Label Label5
Caption = "Zeichen :"
FontBold = 0 'False
FontItalic = 0 'False
FontName = "MS Sans Serif"
FontSize = 8.25
FontStrikethru = 0 'False
FontUnderline = 0 'False
Height = 255
Left = 1440
TabIndex = 3
Top = 5760
Width = 735
End
Begin Label Label4
Alignment = 1 'Right Justify
Caption = "Zeile :"
FontBold = 0 'False
FontItalic = 0 'False
FontName = "MS Sans Serif"
FontSize = 8.25
FontStrikethru = 0 'False
FontUnderline = 0 'False
Height = 255
Left = 120
TabIndex = 4
Top = 5760
Width = 615
End
Begin Label Label1
BorderStyle = 1 'Fixed Single
Height = 255
Left = 840
TabIndex = 1
Top = 5760
Width = 495
End
End

Declare Function SendMessage Lib "user" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Any) As Integer
Const WM_USER = &H400
Const EM_GETLINECOUNT = WM_USER + 10
Const EM_LINEFROMCHAR = WM_USER + 25
Const EM_LINEINDEX = WM_USER + 11

Sub Command1_Click ()
Unload form1
Set form1 = Nothing
End
End Sub

Sub Timer1_Timer ()
iLines = SendMessage(Text1.hWnd, EM_LINEFROMCHAR, -1, 0&) + 1

Chars = SendMessage(Text1.hWnd, EM_LINEINDEX, -1, 0&)

iCol = (Text1.SelStart + Text1.SelLength) - Chars + 1

ILinesCount = "Anzahl Zeilen: " & SendMessage(Text1.hWnd, EM_GETLINECOUNT, 0, 0&)

Label1.Caption = iLines
Label2.Caption = iCol
End Sub

Um den Code zu verwenden legen Sie, zum Beispiel mit Notepad, eine Datei an, in den Sie den Code kopieren und speichern die Datei unter dem vorgegebenen Namen ab. Starten Sie nun die *.mak Datei und es öffnet sich Ihr Visual Basic Programm, in dem Sie nun das Projekt zum Test verfügbar haben.


Tipp-Download

Quelle : Jürgen Anke

Zurück zur Übersichtsseite