Text in Edit wird nicht markiert

  • Hallo Gemeinde,

    ich möchte am Ende einer Funktion einen Hinweistext an ein EditCtrl übergeben und diesen danach markeiren, da das Edit als Inputfeld dienen soll um einen QR zu scannen.

    Code
        GUICtrlSetState($idCode, $GUI_Enable)
        GUICtrlSetData($idCode, "Now scan your HW and klick the Button 'Booking'")
        GUICtrlSetFont($idCode, 16, 800, 0, "Bosch Office Sans")
        GUICtrlSetState($idCode, $GUI_FOCUS)
        $sMSG = GUICtrlSendMsg($idCode, $EM_SETSEL, $start_char, $end_char)
        ToolTip($sMSG)
        ;_GUICtrlEdit_SetSel($idCode, 0, -1)
    
    EndFunc   ;==>ADLogin

    Das Edit muss im Vorfeld der Funktion disabled sein, da sonst ein vorher auszulesender String dort hineingeschrieben werden würde. Deshalb der Enable-Befehl.

    Weder der GuiCtrlSendMsg-Befehl markiert den Text noch _GuiCtrlEdit_SetSel. Lasse ich den Codeschnipsel an einer anderen Stelle im Programm laufen, würde der Text markiert werden.

    Hat jemand eine Idee warum der Text zwar in das Edit geschrieben wird, es dann aber nicht markiert wird oderweiss jemand eine andere Möglichkeit wie ich den Hinweistext überschrieben bekomme?

    Func ADLogin()

    Func ADLogin()

    #Region----------------------------------------------------------------------------------------

    Die Func Macht einen AD-Login, überprüft verschiedene "AD-Werte"


    #EndRegion---------------------------------------------------------------------------------

    Sleep(2000)

    Send("{Backspace}")

    $sUserId = InputBox("Login", "AD-Loginname" & @CRLF & @CRLF & "e.g. de\xy123z", " ", " M")

    If @error = 1 Then ; Wenn user den Abbrechen Button drückt...

    ShellExecute(@ScriptName)

    Exit

    EndIf

    $aTEMP = StringSplit($sUserId, "\")

    $sName = $aTEMP[2]

    While 1

    If $aTEMP[0] <> 2 Then

    $sMSG1 = MsgBox(17, "Active Directory Functions", "Wrong format for NETBIOS name." & @CRLF & "Has to be ""Domain\Userid""!" & @CRLF & @CRLF & "e.g. ""de\xy0815vw""")

    If $sMSG1 = 7 Then

    ShellExecute(@ScriptName) ; Programm wird neu gestartet damit die Leseroutine wieder aktiv ist.

    Exit

    EndIf

    $sUserId = InputBox("Login", "AD-Loginname" & @CRLF & @CRLF & "e.g. de\xy123z", "", " M")

    If @error = 1 Then ; Wenn user den Abbrechen Button drückt...

    ShellExecute(@ScriptName)

    Exit

    EndIf

    $aTEMP = StringSplit($sUserId, "\")

    $sName = $aTEMP[2]

    ExitLoop

    Else

    ExitLoop

    EndIf


    WEnd


    While 1 ; Schleife zur Wiederholung der PWD-Abfrage

    $sPwd1 = InputBox("Login", "AD-Password", "", "*", "", " M")

    If @error = 1 Then

    ShellExecute(@ScriptName)

    Exit

    EndIf

    If $sPwd1 = "" Then

    $sVar = MsgBox(17, "Active Directory Functions", "Password is missing!")

    If $sVar = 7 Then

    ShellExecute(@ScriptName)

    Exit

    EndIf

    Else

    $sPwd2 = InputBox("Verifying Password", " please verify AD-Password", "", "*", "", " M")

    If @error = 1 Then

    ShellExecute(@ScriptName)

    Exit

    EndIf

    If $sPwd2 = "" Then

    $sVar = MsgBox(17, "Active Directory Functions", "Password is missing!")

    If $sVar = 7 Then

    ShellExecute(@ScriptName)

    Exit

    EndIf

    Else

    If $sPwd1 <> $sPwd2 Then

    $sVar = MsgBox(17, "Login-Alert!!!", "Passwords doesn't match")

    $sPwd1 = ""

    $sPwd2 = ""

    If $sVar = 7 Then

    ShellExecute(@ScriptName)

    Exit

    EndIf

    Else

    ExitLoop

    EndIf

    EndIf

    EndIf

    WEnd

    _AD_Open()

    Global $sFQDN = _AD_SamAccountNameToFQDN($sName) ; Umsetzen des AnmeldeNamens in den FQDN

    _AD_Close()


    If _AD_Open($sUserId, $sPwd1) Then

    $sDispName = _AD_FQDNToDisplayname($sFQDN)

    $aTEMP2 = StringSplit($sDispName, "(")

    ;_ArrayDisplay($aTEMP2)

    $sDispName = StringStripWS($aTEMP2[1], 2)

    $sDispName = StringReplace($sDispName, " ", ", ", 2) ; das Leerzeichen im String wird durch ein komma ersetzt: z.b. Mustermann Hans wird Mustermann, Hans

    GUICtrlSetData($sDisplayname, $sDispName)

    GUICtrlSetFont($sDisplayname, 18, 600, 0, "Bosch Office Sans")

    $aTEMP3 = StringSplit($sDispName, " ") ;_Arraydisplay($aTEMP3) Aufspaltung des Displaynamens in index 1 = Nachname und Index 2 = Vorname

    $sPwd1 = ""

    $sPwd2 = ""

    ElseIf @error <= 8 Then

    MsgBox(16, "Active Directory Functions", "The logon was not succcessful!" & @CRLF & @CRLF & "@error: " & @error & ", @extended: " & @extended)

    Else

    MsgBox(16, "Active Directory Functions", "The logon was not succcessful!" & @CRLF & @CRLF & "@error: " & @error & ", @extended: " & @extended & _

    @CRLF & @CRLF & "Extended error information will be displayed")

    Global $aError = _AD_GetLastADSIError()

    ;_ArrayDisplay($aError)

    EndIf


    If _AD_IsObjectDisabled($sName) Then

    GUICtrlSetData($sDisplayname, "User account '" & $sName & "' is disabled!!!" & @CRLF & "scanning HW not possible")

    Return

    EndIf

    GUICtrlSetState($idCode, $GUI_Enable)

    GUICtrlSetData($idCode, "Now scan your HW and klick the Button 'Booking'")

    GUICtrlSetFont($idCode, 16, 800, 0, "Bosch Office Sans")

    GUICtrlSetState($idCode, $GUI_FOCUS)

    $sMSG = GUICtrlSendMsg($idCode, $EM_SETSEL, $start_char, $end_char) ;die Variablen start und end sind global

    ToolTip($sMSG) gibt meistens o zurück. manchmal auch 1

    ;_GUICtrlEdit_SetSel($idCode, 0, -1)

    EndFunc ;==>ADLogin

  • Klingt nach Cuebanner...

    Quelle: https://www.autoitscript.com/forum/topic/16…comment=1226083 (von Melba23)

  • ;( also mit cuebanner funzt das ebenso wenig. Außerdem handelt es sich bei meinem Control um ein Edit und nicht um ein Inputfeld. bin mir also nicht sicher
    ob der vorschlag da dazu passt.

    Ich frage mal anders: Was kann das markieren des Textes verhindern?

  • Hallo Ahnungslos,

    ich hatte gestern noch den Code bereits umgestellt und wie du vorgeschlagen hattest benutze ich für den Hinweistext nun ein Label. Ist nicht schön aber funzt.
    Vielen lieben dank für deine Ideen. Ich betrachte somit den Thread erst mal als erledigt.

    p.s. die beiden Variablen sind richtig. ;)