Grauer Infotext in Inputs

  • Nach 2 Tagen suchen, hab ich nun in der MSDN eine Funktion gefunden um einen Infotext in Inputs einzufügen. Villeicht kanns ja mal jemand gebrauchen...

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GuiEdit.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $msg, $Input1, $Input2

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

    GUICreate("Input Beispiel", 320, 120)

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

    $Input1 = GUICtrlCreateInput("", 10, 35, 300, 20)
    _GUICtrlEdit_SetCueBanner(-1, "Ich bin ein Text,")

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

    $Input2 = GUICtrlCreateInput("", 10, 70, 300, 20)
    _GUICtrlEdit_SetCueBanner(-1, "und ich auch...")

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

    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd
    MsgBox(0, "Dein Text ohne die CueBanner:", GuiCtrlRead($Input1) & @CR & GuiCtrlRead($Input2))
    EndFunc ;==>Example

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _GUICtrlEdit_SetCueBanner
    ; Description ...: Displays a bannertext that disappears when the user clicks in the control
    ; Syntax.........: _GUICtrlEdit_SetCueBanner($hWnd, $sText)
    ; Parameters ....: $hWnd - Handle to the control
    ; $sText - String for text of CueBanner (Unicode)
    ; Return values .: Success - True
    ; Failure - False
    ; Author ........: Christian Korittke (Ahnungslos)
    ; Modified.......:
    ; Remarks .......: Minimun OS Windows XP, can't use on multiline edit controls
    ; Related .......:
    ; Link ..........:
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _GUICtrlEdit_SetCueBanner($hWnd, $sText)
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    If Not StringLen($sText) Then Return False

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

    Local $tagCueBannerText = "WCHAR Text[" & StringLen($sText) + 1 & "]"
    Local $tTT = DllStructCreate($tagCueBannerText)
    DllStructSetData($tTT, "Text", $sText)
    Return _SendMessage($hWnd,$EM_SETCUEBANNER, FALSE, DllStructGetPtr($tTT))
    EndFunc ;==>_GUICtrlEdit_SetCueBanner

    [/autoit]


    Ich hoffe mal das es so eine Funktion noch nicht gibt, Google hat zumindest nichts gefunden^^

    • Offizieller Beitrag

    Feine Sache.
    Tipp: Um Includes zu vermeiden Konstanten lokal in der Funktion deklarieren und Funktionen, die auch nur einen Dll-Aufruf darstellen (_SendMessage) direkt einbinden:

    Spoiler anzeigen
    [autoit]

    Func _GUICtrlEdit_SetCueBanner($hWnd, $sText)
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    If Not StringLen($sText) Then Return False
    Local $tTT = DllStructCreate("WCHAR[" & StringLen($sText) +1 & "]")
    DllStructSetData($tTT, 1, $sText)
    Local Const $_EM_SETCUEBANNER = 0x1500 +1
    Local $ret = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hWnd, "uint", $_EM_SETCUEBANNER, "wparam", False, "lparam", DllStructGetPtr($tTT))
    Return $ret[0]
    EndFunc ;==>_GUICtrlEdit_SetCueBanner

    [/autoit]
  • Du brauchst noch die "SendMessage.au3" oder verwende die von mir gepostete Version, die braucht keine Includes.

    Ich benutze deine Version.
    Klappt trozdem nicht..

    und wenn ich auf schließen klicke und sich die MsgBox geöffnet hat, ich daraufhin auf Okay klicke hängt sich das Programm auf.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiEdit.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $msg, $Input1, $Input2

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

    GUICreate("Input Beispiel", 320, 120)

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

    $Input1 = GUICtrlCreateInput("", 10, 35, 300, 20)
    _GUICtrlEdit_SetCueBanner(-1, "Ich bin ein Text,")

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

    $Input2 = GUICtrlCreateInput("", 10, 70, 300, 20)
    _GUICtrlEdit_SetCueBanner(-1, "und ich auch...")

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

    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd
    MsgBox(0, "Dein Text ohne die CueBanner:", GuiCtrlRead($Input1) & @CR & GuiCtrlRead($Input2))
    EndFunc ;==>Example

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

    Func _GUICtrlEdit_SetCueBanner($hWnd, $sText)
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    If Not StringLen($sText) Then Return False
    Local $tTT = DllStructCreate("WCHAR[" & StringLen($sText) +1 & "]")
    DllStructSetData($tTT, 1, $sText)
    Local Const $_EM_SETCUEBANNER = 0x1500 +1
    Local $ret = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hWnd, "uint", $_EM_SETCUEBANNER, "wparam", False, "lparam", DllStructGetPtr($tTT))
    Return $ret[0]
    EndFunc ;==>_GUICtrlEdit_SetCueBanner

    [/autoit]
  • Windows Xp Home Edition.
    AutoIt Version 3.3.6.1

    Habe aber kein Microsoft net Framework, ich weiß nicht ob es daran liegt ^^

    hab ich auch, funzt einwandfrei. (hab auch net FW.)

  • exakt das habe ich vor einiger zeit mal gesucht, yeah ^^
    villt noch den eingesezten text in schriftart veränderbar machen?
    mach das noch mit icons und ich verehre dich (die muss man dann auch z.B. rechts oder links plazieren können)
    aber echt gut ;)

    Edit1: warum der funktionsname "_GUICtrlEdit_SetCueBanner()", wenn es gar nicht für edits geht?

  • @black_skorpi:
    Das mit dem Icons sollte nur über ein workaround möglich sein, also WM_COMMAND abfangen und dann auf SetFocus und KillFocus reagieren.
    Edit und Input ist prizipell das gleiche. Es geht auch in Edits, nur halt nicht in mehrspaltigen.

    @tuttifrutti:
    Hab hier gerade XP Pro ohne .Net und nur mit eingeschränkten Rechten und hier läufts auch.
    Kannst ja mal die Windows Updates laufen lassen ;)
    Lg