Input mit grauem Infotext - auch wenn Fokus auf Input

    • Offizieller Beitrag

    Ihr kennt ja sicher die Lösung um grauen Infotext in einem Input anzeigen zu lassen.
    Der Nachteil war, dass dieses Input nicht den Fokus haben darf, damit dieser Text gezeigt wird.
    Ich habe hier mal eine Lösung erstellt, die das umgeht.
    Zwar hat das Input den Fokus nicht wirklich, aber optisch entsteht der Eindruck, als ob das Input den Fokus hat (das Caret blinkt am Inputanfang vor dem grauen Infotext). Der User muß auch nicht erst in das Input klicken, sondern kann sofort schreiben. Mit dem ersten geschriebenen Zeichen findet dann der Fokuswechsel zum tatsächlichen Input statt.
    Falls der Inhalt des Input gelöscht wird, erscheint sofort wieder der graue Infotext.

    Hier das Bsp. (die Befehlszeile in Run ist auf meinen Browser zugeschnitten, für die Darstellung der Funktionsweise aber nicht wichtig):

    Edit: Der von Fresapore beschriebene Effekt sollte jetzt nicht mehr auftreten.

    Spoiler anzeigen
    [autoit]

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

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

    $hGui = GUICreate('Web Application', 300, 30);, @DesktopWidth-310, @DesktopHeight-60)
    $cDummy = GUICtrlCreateInput('', 8, 6, 1 , 20)
    $cIn = GUICtrlCreateInput('', 5, 5, 250, 20)
    GUICtrlSendMsg($cIn, 0x1501, 0, "Bitte Web-Adresse oder Suchtext eingeben")
    $btSearch = GUICtrlCreateButton('?', 255, 5, 20, 20)
    $btLink = GUICtrlCreateButton('>', 275, 5, 20, 20)
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btSearch
    $s2Search = GUICtrlRead($cIn)
    If $s2Search <> '' Then ShellExecute("http://www.google.de/search?q=" & $s2Search)
    Case $btLink
    $sLink = GUICtrlRead($cIn)
    If $sLink <> '' Then Run('"C:\Program Files\K-Meleon1.6.0_Beta2_en-US\k-meleon.exe" ' & '"' & $sLink & '"')
    EndSwitch
    WEnd

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam)
    If BitShift($iwParam, 16) = 0x300 Then
    If BitAND($iwParam, 0xFFFF) = $cDummy Then
    GUICtrlSetData($cIn, GUICtrlRead($cDummy))
    GUICtrlSetData($cDummy, '')
    ControlFocus($hWnd, '', $cIn)
    ElseIf GUICtrlRead($cIn) = '' Then
    ControlFocus($hWnd, '', $cDummy)
    EndIf
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]
  • Hallo BugFix,

    dein Skript läuft so nicht es fehlt:

    [autoit]

    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>

    [/autoit]


    Danach läuft es zwar aber der von dir versprochene Effekt mit dem Hinweistext bleibt aus. Das Input ist bei mir unter XP SP3 sofort weis und der Hineistext fehlt,

    mfg autoBert

  • Mit den von Autobert genannten Includes funktioniert es bei mir Problemlos. (Win 7 Pro 64-Bit)
    Allerdings ist bei mir ein komischer Effekt aufgetreten.
    Wenn man etwas eingibt, und man dann die eingegebenen Zeichen löscht, und neues eingibt, erscheinen beim mehrmaligen wiederholen zuvor eingegebene Zeichen, wenn man Backslash drückt..
    Sonst aber durchaus zu gebrauchen ;)

    MfG,
    Fresapore

    • Offizieller Beitrag

    Danach läuft es zwar aber der von dir versprochene Effekt mit dem Hinweistext bleibt aus. Das Input ist bei mir unter XP SP3 sofort weis und der Hineistext fehlt,

    Ich habe es jetzt mal unter XP getestet - funktioniert, wie gewollt:
    autoit.de/wcf/attachment/14195/

    Allerdings ist bei mir ein komischer Effekt aufgetreten.
    Wenn man etwas eingibt, und man dann die eingegebenen Zeichen löscht, und neues eingibt, erscheinen beim mehrmaligen wiederholen zuvor eingegebene Zeichen, wenn man Backslash drückt..

    OK, war bei mir zwar nicht sichtbar - sollte aber mit einer jetzt eingefügten Änderung ausbleiben.

  • Der von Freasporn entdeckte Bug ist (bei mir) immer noch da. Zudem zeigt der Klick auf ">" keine Wirkung, es funktioniert nur der "?" Button. Nochwas: Im Code steht der Pfad C:\Program Files\K-Meleon1.6.0_Beta2_en-US\k-meleon.exe, der bei mir aber gar nicht existiert.

    Edit: Hat sich erledigt; mein Fehler

    • Offizieller Beitrag

    Nochwas: Im Code steht der Pfad C:\Program Files\K-Meleon1.6.0_Beta2_en-US\k-meleon.exe, der bei mir aber gar nicht existiert.


    Wer lesen kann ist klar im Vorteil. :D

    Zitat

    (die Befehlszeile in Run ist auf meinen Browser zugeschnitten, für die Darstellung der Funktionsweise aber nicht wichtig)


    Habe diesen Hinweis jetzt rot eingefärbt. ;)

  • EM_SETCUEBANNER message (0x1501)
    wParam: TRUE if the cue banner should show even when the edit control has focus; otherwise, FALSE. FALSE is the default behavior—the cue banner disappears when the user clicks in the control.

    Ergo GUICtrlSendMsg($cIn, 0x1501, 1, "Bitte Web-Adresse oder Suchtext eingeben") sollte reichen


    p.s.: für ComboBox gibt es die CB_SETCUEBANNER message (0x1703) dort gibt es allerdings nur Zero als wParam

    4 Mal editiert, zuletzt von kaesereibe (25. November 2015 um 10:21)