Mehrere Edits und ES_WANTRETURN

  • Hi.

    Ich habe ein Problem. Wenn ein Edits mit dem Style $ES_WANTRETURN erstellt wird, so bricht er die aktuelle Zeile beim Erreichen des rechten Rands automatisch um. Weiter können nur so viele Zeilen im Edit stehen, wie auch reinpassen, hat man das Ende erreicht, so kann man nichts mehr eintippen, und Windows gibt einen Fehlerton, wenn man es doch versucht.

    Jetzt meine Frage. Ich habe mindestens 2 Edits mit diesem Style. Nun möchte ich von einem nahtlos in den anderen weiterschreiben können, das heißt, wenn ich beim ersten nichts mehr eingeben kann, und dann trotzdem noch weitertippe, soll der Cursor bzw. der Focus auf das nächste Edit gelegt werden. Wie ich das realisieren könnte, ist mir völlig unklar.

    Zeichenanzahl messen ist auch Blödsinn, da je nach Buchstabe und Font immer mehr oder weniger Zeichen in die Edits passen.

    Hier noch ein kleines Testskript:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Edit Test")
    $1 = GUICtrlCreateEdit("Test", 5, 5, 390, 195, $ES_WANTRETURN)
    $2 = GUICtrlCreateEdit("", 5, 200, 390, 195, $ES_WANTRETURN)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While GUIGetMsg()<>-3 And Sleep(10)

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit]

    Einmal editiert, zuletzt von minx (27. Oktober 2012 um 18:51)

    • Offizieller Beitrag

    Das kannst du so machen:

    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    $hGUI = GUICreate("Edit Test")
    $1 = GUICtrlCreateEdit("Test", 5, 5, 390, 195, $ES_WANTRETURN)
    $2 = GUICtrlCreateEdit("", 5, 200, 390, 195, $ES_WANTRETURN)

    [/autoit][autoit][/autoit][autoit]

    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

    [/autoit][autoit][/autoit][autoit]

    While GUIGetMsg() <> -3
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iCode
    $hWndFrom = $ilParam
    $iCode = BitShift($iwParam, 16) ; Hi Word
    If $hWndFrom = GUICtrlGetHandle($1) And $iCode = 1281 Then ControlFocus($hGUI, '', $2)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]
  • Danke, funktioniert sehr gut :thumbup: . Jetzt bleibt das Problem, das ich mit z.B. Backspace nicht wieder in das erste Control komme, wenn der Cursor am Anfang des zweiten steht...

    • Offizieller Beitrag

    Jetzt bleibt das Problem, das ich mit z.B. Backspace nicht wieder in das erste Control komme, wenn der Cursor am Anfang des zweiten steht...


    Im zweiten Edit (über "WM_COMMAND") den $iCode "$EN_CHANGE" abfragen und dabei Länge Inhalt Edit2 prüfen, wenn = 0, dann Fokus auf Edit 1 ans Ende.

    • Offizieller Beitrag

    Gibt es nun auch noch eine Lösung für die Navigation mit Pfeiltasten?


    Boshaft könnte ich sagen: Denk doch mal ein bischen nach... :whistling:

    Weise den Pfeiltasten über GuiSetAccelerators Dummy-ID's zu. Bei Auslösen der Dummies durch die Pfeiltasten prüfst du mit den Edit-Funktionen die Zeichenposition im Edit. Wenn = 0 wiederum Fokuswechsel. ;)