Textbox mit Zeilenumrüchen auf max. 3 Zeilen begrenzen

  • VB6

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von jauno.

    Textbox mit Zeilenumrüchen auf max. 3 Zeilen begrenzen

    Ich möchte folgendes unter VB6 realisieren:
    Eine Multiline-Textbox mit max. 3 Zeilen und 120 Zeichen. Zeilenumbrüche sollen möglich sein. Dabei sollen keine weiteren Zeichen angenommen werden, wenn die maximale Zeilenanzahl erreicht ist. Mein Problem dabei ist, wie ich die Tastatueingabe (z. B. in der KeyDown-Prozedur) abfangen kann, bevor eine 4. Zeile angefangen wird und vor allen Dingen bevor das Ergebnis in der Textbox dargestellt wird. Das Verhalten der Textbox mit den Zeilenumbrüchen allein mit VB-Bordmitteln vorauszuberechnen stellt einen erheblichen Programmieraufwand dar und verzögert auch die Texteingabe.
    Ich suche nach einer eleganteren Methode. Mir schwebt eine 2. Textbox vor, die quasi ein clone der Eingabetextbox darstellt. Auf die könnte man die Eingabe umleiten und prüfen, ob die Zelenanzahl >3 ist, wenn ja in KeyDown der Eingabetextbox dann Keycode = 0 setzen.
    Hat jemand eine Idee, wie man das per API am elegantesten realisieren könnte?
    Ich habe es einstweilen mit 2 Textboxen - Text1 und Text2 mit Multiline und gleichen Ausmaßen so gelöst:

    Quellcode

    1. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
    2. Const EM_GETLINECOUNT = &HBA
    3. Private Const MAXLINE = 3
    4. Private Sub Text1_Change()
    5. Text2.Text = Text1.Text
    6. End Sub
    7. Private Sub Text1_KeyPress(KeyAscii As Integer)
    8. Dim rVal As Long
    9. rVal = SendMessage(Text1.hWnd, EM_GETLINECOUNT, -1, 0&)
    10. If KeyAscii = 13 Then
    11. If rVal >= MAXLINE Then KeyAscii = 0
    12. ElseIf KeyAscii >= 32 And KeyAscii <= 255 Then
    13. Text2.Text = Left$(Text1.Text, Text1.SelStart) + Chr$(KeyAscii) + Mid$(Text1.Text, Text1.SelStart + 1 + Text1.SelLength, Len(Text1.Text))
    14. rVal = SendMessage(Text2.hWnd, EM_GETLINECOUNT, -1, 0&)
    15. If rVal > MAXLINE Then KeyAscii = 0
    16. End If
    17. End Sub


    wenn jemand noch Verbesserungsvorschläge hat, bitte ich um Rückmeldung. Vor allem geht es jetzt noch um das COPY und PASTE