Eigene InputBox funktioniert nicht ganz

  • Hallo,

    da ich den Standard InpuBox von AutoIt nicht so super finde hab ich mir ein eigenes gemacht. Aber irgendwie scheint mein Script nicht genauso gut zu funktionieren. Zum Beispiel der OK Button von Autoits InputBox ist irgendwie immer ausgewählt. Wie kann ich das auch machen, bzw. was fehlt an meinem Script noch?

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Run_Au3check=n
    #AutoIt3Wrapper_Tidy_Stop_OnError=n
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/CS 0 /CN 0 /CF 0/CV 0
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.0.0
    Author: DeepRed
    Copyright: 2008 - 2009 by DeepRed

    Script Function:
    Template AutoIt script.

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

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

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

    MsgBox(0,"",_Inputbox("Titel","Inhalt"))

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

    Func _Inputbox($_I_Titel,$_I_Value)
    $_I_GUI = GUICreate($_I_Titel, 350, 110)
    GUISetIcon("shell32.dll", -166)
    $_I_Input = GUICtrlCreateInput($_I_Value, 8, 45, 334, 21)
    GUICtrlCreateLabel("Bitte geben Sie einen Wert ein. Ansonsten können Sie auf abbrechen" & @CRLF & "drücken bzw. den Wert so lassen.", 8, 8, 337, 33)
    $_I_Ok_Button = GUICtrlCreateButton("OK", 184, 75, 75, 25, 0)
    GUICtrlSetState(-1, $GUI_FOCUS)
    $_I_Chancel_Button = GUICtrlCreateButton("Abbrechen", 267, 75, 75, 25, 0)
    GUISetState(@SW_SHOW)
    While 1
    $_I_GUIGetMsg = GUIGetMsg()
    Switch $_I_GUIGetMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $_I_Ok_Button
    Return GUICtrlRead($_I_Input)
    ExitLoop

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

    Case $_I_Chancel_Button
    ExitLoop
    EndSwitch
    WEnd
    GUIDelete($_I_GUI)
    EndFunc ;==>_Inputbox

    [/autoit]
  • hier ein kleiner workaround:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Run_Au3check=n
    #AutoIt3Wrapper_Tidy_Stop_OnError=n
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/CS 0 /CN 0 /CF 0/CV 0
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.0.0
    Author: DeepRed
    Copyright: 2008 - 2009 by DeepRed

    Script Function:
    Template AutoIt script.

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    MsgBox(0,"",_Inputbox("Titel","Inhalt"))

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

    Func _Inputbox($_I_Titel = "Titel",$_I_Value = "Inhalt")
    Global $titel = $_I_Titel
    $_I_GUI = GUICreate($_I_Titel, 350, 110)
    GUISetIcon("shell32.dll", -166)
    $_I_Input = GUICtrlCreateInput($_I_Value, 8, 45, 334, 21)
    GUICtrlCreateLabel("Bitte geben Sie einen Wert ein. Ansonsten können Sie auf abbrechen" & @CRLF & "drücken bzw. den Wert so lassen.", 8, 8, 337, 33)
    $_I_Ok_Button = GUICtrlCreateButton("OK", 184, 75, 75, 25, 0)
    GUICtrlSetState(-1, $GUI_FOCUS)
    $_I_Chancel_Button = GUICtrlCreateButton("Abbrechen", 267, 75, 75, 25, 0)
    GUICtrlSetState($_I_Input, $GUI_FOCUS)
    GUISetState()
    While 1
    If WinActive($_I_Titel) Then
    HotKeySet("{enter}", "_Click")
    Else
    HotKeySet("{enter}")
    EndIf
    $_I_GUIGetMsg = GUIGetMsg()
    Switch $_I_GUIGetMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $_I_Ok_Button
    $_s_Inputread = GUICtrlRead($_I_Input)
    If $_s_Inputread = "" Then Return
    GUIDelete($_I_GUI)
    Return $_s_Inputread
    Case $_I_Chancel_Button
    ExitLoop
    EndSwitch
    Sleep(50)
    WEnd
    GUIDelete($_I_GUI)
    EndFunc ;==>_Inputbox

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

    Func _Click()
    ControlClick($titel, "", "[CLASS:Button; INSTANCE:1]")
    EndFunc

    [/autoit]


    dazu braucht man halt ne 2. funktion...
    und der button is auch net immer ausgewählt...
    aber es haut^^

    Padmak

    • Offizieller Beitrag

    Flexibler wäre deine Inputbox , wenn der Anzuzeigende Text auch als Parameter mit übergeben würde. Denkebar wäre auch das du den vorgegebenden Standardwert als Rückgabe nimmst wenn abbrechen gedrückt wird . Oder wenigstens einen Rückgabewert , das der Abbrechen Button gedrückt wurde .

  • Zitat von Padmak

    dazu braucht man halt ne 2. funktion...
    und der button is auch net immer ausgewählt...
    aber es haut^^

    Stimmt, aber ein Hotkey blockiert auch die Eingabe an der Tastatur... mal schauen^^

    Zitat von Raupi

    Flexibler wäre deine Inputbox , wenn der Anzuzeigende Text auch als Parameter mit übergeben würde.

    Nee das brauche ich im Moment nicht aber das lässt sich machen. :D

    Zitat von Raupi

    Denkebar wäre auch das du den vorgegebenden Standardwert als Rückgabe nimmst wenn abbrechen gedrückt wird . Oder wenigstens einen Rückgabewert , das der Abbrechen Button gedrückt wurde .

    Welche Rückgabewerte werden bei einem Normalen InputBox zurückgegeben?
    Nur die 1?

  • Stimmt, aber ein Hotkey blockiert auch die Eingabe an der Tastatur... mal schauen^^


    naja aber nur von enter...
    und in einem einzeiligen (!!!!!) input gibts gar keine zeilenumbrüche...
    ausserdem ist der hotkey nur aktiv, wenn das fenster im Vordergrund, d.h. aktiv ist^^

    Padmak

  • wozu gibt es BS_DEFPUSHBUTTON ;)

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    MsgBox(0,"",_Inputbox("Titel","Inhalt"))

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

    Func _Inputbox($_I_Titel = "Titel",$_I_Value = "Inhalt")
    $_I_GUI = GUICreate($_I_Titel, 350, 110)
    GUISetIcon("shell32.dll", -166)
    $_I_Input = GUICtrlCreateInput($_I_Value, 8, 45, 334, 21)
    GUICtrlCreateLabel("Bitte geben Sie einen Wert ein. Ansonsten können Sie auf abbrechen" & @CRLF & "drücken bzw. den Wert so lassen.", 8, 8, 337, 33)
    $_I_Ok_Button = GUICtrlCreateButton("OK", 184, 75, 75, 25, $BS_DEFPUSHBUTTON)
    GUICtrlSetState(-1, $GUI_FOCUS)
    $_I_Chancel_Button = GUICtrlCreateButton("Abbrechen", 267, 75, 75, 25, 0)
    GUICtrlSetState($_I_Input, $GUI_FOCUS)
    GUISetState()
    While 1
    $_I_GUIGetMsg = GUIGetMsg()
    Switch $_I_GUIGetMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $_I_Ok_Button
    $_s_Inputread = GUICtrlRead($_I_Input)
    GUIDelete($_I_GUI)
    Return $_s_Inputread
    Case $_I_Chancel_Button
    ExitLoop
    EndSwitch
    Sleep(50)
    WEnd
    GUIDelete($_I_GUI)
    Return SetError(1,0,"")
    EndFunc ;==>_Inputbox

    [/autoit]
    • Offizieller Beitrag

    Das kannst du dir doch selber beantworten. Das steht doch alles in der Hilfe .

  • Das hier?:

    Rückgabewert
    Erfolg: Gibt die eingegebene Zeichenfolge zurück. Fehler: Gibt einen Leerstring "" zurück und setzt @error wie folgt: @Error 0 = Der zurück gegebene String ist gültig.
    1 = Der Abbrechen-Button wurde gedrückt.
    2 = Die Timeout Wartezeit wurde erreicht.
    3 = Die Eingabe-Box konnte nicht dargestellt werden. Dies passiert normalerweise durch fehlerhafte Parameterwerte.

  • Lies doch:

    Zitat von Deepred

    Parameter


    Nicht Rückgabewerte
    Die Parameter sind das über den Rückgabewerten^^

    Padmak