MouseClick in Inputbox feststellen

  • Hallo zusammen,

    hat jemand von Euch eine Ahnung, wie ich einen MouseClick in eine Inputbox feststellen kann?
    Ich möchte einfach nur, dass bei anklicken einer Inputbox der vorhandene Inhalt automatisch gelöscht wird.

    ich finde gerade nicht den richtigen Windows Message Code.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Einmal editiert, zuletzt von Schnuffel (20. Januar 2009 um 23:26)

    • Offizieller Beitrag

    WM_COMMAND

    Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    GUICreate('Test', 400, 80)
    $hInput1 = GUICtrlCreateInput('blablabla', 10, 10, 380, 20)
    $hInput2 = GUICtrlCreateInput('blablabla', 10, 40, 380, 20)
    GUISetState()

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

    GUIRegisterMsg($WM_COMMAND, 'MY_WM_COMMAND')

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

    Do
    Until GUIGetMsg() = -3

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

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0x0000FFFF)
    If BitAND($nNotifyCode, 256) Then GUICtrlSetData($nID, '')
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • Hallo Oscar,

    erstmal Danke für den Tip.

    Auf meine Frage bezogen eigentlich perfekt.
    Hab mich nur leider ungenau ausgedrückt, da Deine Lösung mein Problem nicht löst.
    Bei Deiner Lösung wird der Inhalt auch mit der TAB-Taste gelöscht, und dass möchte ich nicht.

    Ich habe eine GUI, in der ich für jeweils einen Monat Stundenzeiten eintragen möchte.
    D.h. 31 Reihen mit je folgenden Inputboxen.
    Kommen Gehen Pause ......
    Ich hab da mal Dein Beispiel auf meine Situation angepasst...

    Spoiler anzeigen
    [autoit]

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

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

    Global $dll_user32 = DllOpen("user32.dll")
    Global $inhalt, $inhalt_pur, $nID
    GUICreate('Test', 300, 180)
    $hInput1 = GUICtrlCreateInput(' :', 10, 10, 40, 20)
    $hInput2 = GUICtrlCreateInput(' :', 60, 10, 40, 20)
    $hInput3 = GUICtrlCreateInput(' :', 120, 10, 40, 20)
    $hInput4 = GUICtrlCreateInput(' :', 10, 60, 40, 20)
    $hInput5 = GUICtrlCreateInput(' :', 60, 60, 40, 20)
    $hInput6 = GUICtrlCreateInput(' :', 120, 60, 40, 20)
    GUISetState()

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

    GUIRegisterMsg($WM_COMMAND, 'MY_WM_COMMAND')

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

    Do
    Until GUIGetMsg() = -3

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

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0x0000FFFF)
    $inhalt = GUICtrlRead($nID)
    $inhalt_pur = StringReplace(StringReplace($inhalt, " ", ""), ":", "")
    If $nNotifyCode = $EN_CHANGE Then
    zeit_pruefen($nID, $inhalt_pur)
    Return
    EndIf
    If $nNotifyCode = $EN_KILLFOCUS Then
    en_killfocus($nID, $inhalt_pur)
    Return
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

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

    Func zeit_pruefen($nID, $inhalt_pur)
    If _IsPressed("08", $dll_user32) Then
    GUICtrlSetData($nID, StringTrimRight($inhalt, 1))
    Return
    EndIf
    Switch StringLen($inhalt_pur)
    Case 1
    Switch $inhalt_pur
    Case 1 To 2
    GUICtrlSetData($nID, $inhalt_pur & " :")
    Send("{LEFT 2}")
    Case 3 To 9
    GUICtrlSetData($nID, "0" & $inhalt_pur & ":")
    EndSwitch
    Case 2
    Switch $inhalt_pur
    Case 0 To 23
    GUICtrlSetData($nID, $inhalt_pur & ":")
    Case Else
    GUICtrlSetData($nID, "")
    GUICtrlSetState($nID, $GUI_FOCUS)
    Return
    EndSwitch
    Case 3
    Switch StringRight($inhalt_pur, 1)
    Case 0 To 5
    GUICtrlSetData($nID, StringLeft($inhalt_pur, 2) & ":" & StringRight($inhalt_pur, 1))
    Case Else
    GUICtrlSetData($nID, StringLeft($inhalt_pur, 2) & ":")
    EndSwitch
    EndSwitch
    EndFunc ;==>zeit_pruefen

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

    Func en_killfocus($nID, $inhalt_pur)
    Switch StringLen($inhalt_pur)
    Case 0
    GUICtrlSetData($nID, " :")
    Case 1
    Switch $inhalt_pur
    Case 0 To 2
    GUICtrlSetData($nID, "0" & $inhalt_pur & ":00")
    Send("{LEFT 2}")
    Case 3 To 9
    GUICtrlSetData($nID, "0" & $inhalt_pur & ":00")
    EndSwitch
    Case 2
    GUICtrlSetData($nID, $inhalt_pur & ":00")
    Case 3
    GUICtrlSetData($nID, StringLeft($inhalt_pur, 2) & ":" & StringRight($inhalt_pur, 1) & "0")
    EndSwitch
    EndFunc ;==>en_killfocus

    [/autoit]


    Die Anwahl der einzelnen Inputboxen erfolgt mit der Tab-Taste, ohne den möglichen Inhalt zu löschen.
    Dies fange ich schon mit "MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)" ab und schicke den Inhalt an eine Funktion, die die Eingabe auf korrekte Zeiteingabe prüft.

    Da die Inputboxen "vorformatiert" sind in der Form "__:" (Unterstrich = Leerzeichen)
    und bei jeder Eingabe logisch ergänzt werden, ist eigentlich immer ein Inhalt in der Inputbox.
    Ich möchte eigentlich nur erreichen, dass bei einem Mausklick in eine der Inputboxen entweder immer der gesamte Inhalt der Inputbox markiert ist.
    Damit wäre sichergestellt, dass der Cursor nicht irgendwo innerhalb des Inhaltes steht, oder der Doppelpunkt gelöscht wird.

    Ist zwar nur eine optische Sache, wäre aber trotzdem schön, wenn ich das erreichen könnte.

    Um es kurz zu machen, ich brauche eine Möglichkeit aus einem einfachen Mausklick in eine Inputbox automatisch einen Doppelklick zu machen :rolleyes:

    Hat da jemand eine Idee?
    Ich hoffe, ich verwirre niemanden mit meinen Ergüssen ;(

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    • Offizieller Beitrag

    Ändere mal die Funktion "MY_WM_COMMAND":

    [autoit]


    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0x0000FFFF)
    If $nNotifyCode = 256 Then ControlClick($hWnd, '', $nID, 'Left', 2)
    $inhalt = GUICtrlRead($nID)
    $inhalt_pur = StringReplace(StringReplace($inhalt, " ", ""), ":", "")
    If $nNotifyCode = $EN_CHANGE Then
    zeit_pruefen($nID, $inhalt_pur)
    Return
    EndIf
    If $nNotifyCode = $EN_KILLFOCUS Then
    en_killfocus($nID, $inhalt_pur)
    Return
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]
  • Oscar,
    ich danke Dir.

    ich denke besser geht es nicht. :)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)