GUI input bei klick text löschen

  • Moin

    Ich habe ne Hauptgui und ne nebenGUI die beim Clicken auf ein ctrl auf der ahuptGUI aufgerufen wur. Soweit auch kein Problem.
    Nun hab ich in der NebenGUI ein Input indem was drinn steht und dieser Text soll beim klicken auf dieses Control gelöscht werden. Nur leider Funktioniert das bei dem Input nicht so einfach wie ich mir das forgestellt hab.
    Aber sehts selbst hier mal ein versuch von mir

    Spoiler anzeigen
    [autoit]

    Func nebenGUI()
    $aDate = StringSplit(GUICtrlRead($Date),"/")
    Global $hnebenGUI = GUICreate(GUICtrlRead($Date),200,200)
    Global $nebenGUIInput = GUICtrlCreateInput("Gibt hier deine Stundenzahl ein!",20,50,160,20)
    Global $button = GUICtrlCreateButton("test", 50, 150)
    local $onclick = 1
    GUISetState()

    While 1
    $msg2 = GUIGetMsg(1)
    Select
    Case $msg2[0] = $nebenGUIInput And $msg2[0] = $GUI_EVENT_PRIMARYDOWN
    If $onclick Then
    ;MsgBox(0,"",$msg2)
    GUICtrlSetData($nebenGUIInput,"")
    $onclick = 0
    EndIf
    Case $msg2[0] = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect

    WEnd
    EndFunc

    [/autoit]

    außerdem hab ich aus der Hilfe dass hier : $SS_NOTIFY Sendet die STN_CLICKED-Benachrichtigung an das "parent"-Fenster, wenn der Nutzer auf das Control klickt.

    Nur leider hab ich keine Idee wie ich das verwerden bzw. abfragen soll

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    Einmal editiert, zuletzt von Darter (7. April 2010 um 15:19)

  • Theoretisch so ca:

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    Global $hnebenGUI = GUICreate("",200,200)
    Global $Input = GUICtrlCreateInput("Gibt hier deine Stundenzahl ein!",20,50,160,20)
    Global $button = GUICtrlCreateButton("test", 50, 150)

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

    global $counter =0
    GUISetState()
    GUIRegisterMsg($WM_Command, "WM_Command")
    While 1
    $msg2 = GUIGetMsg(1)
    Select
    Case $msg2[0] = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect

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

    WEnd
    func WM_Command($hWnd, $Msg, $wParam, $lParam)
    $iCode = BitShift($wParam, 16)
    $nID = BitAND($wParam, 0x0000FFFF)
    switch $nID
    case $Input
    ConsoleWrite($counter & " | " & $iCode & @CRLF)
    EndSwitch
    $counter +=1
    EndFunc

    [/autoit]


    Bin aber selbst noch am testen, ganz so stimmts noch nicht. ?(

  • [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 154, 74, 254, 124)
    $Input1 = GUICtrlCreateInput("Input1", 8, 8, 121, 21)
    $Input2 = GUICtrlCreateInput("Input2", 8, 40, 121, 21)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $cInfo = GUIGetCursorInfo()
    If IsArray($cInfo) Then
    If $cInfo[4] = $Input1 Then
    GUICtrlSetData($Input1, "")
    ElseIf $cInfo[4] = $Input2 Then
    GUICtrlSetData($Input2, "")
    EndIf
    EndIf
    EndSwitch
    WEnd

    [/autoit]
  • Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <EditConstants.au3>
    Global $hnebenGUI = GUICreate("",200,200)
    Global $Input = GUICtrlCreateInput("Gibt hier deine Stundenzahl ein!",20,50,160,20)
    Global $button = GUICtrlCreateButton("test", 50, 150)

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

    global $counter =0
    GUISetState()
    GUIRegisterMsg($WM_Command, "WM_Command")
    While 1
    $msg2 = GUIGetMsg(1)
    Select
    Case $msg2[0] = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect

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

    WEnd
    func WM_Command($hWnd, $Msg, $wParam, $lParam)
    local $hwndinput
    If not IsHWnd($Input) then $hwndinput = GUICtrlGetHandle($input)
    $iCode = BitShift($wParam, 16)
    switch $lParam
    case $Input, $hwndinput
    switch $iCode
    case $EN_Setfocus
    ConsoleWrite($counter & " | " & $iCode & @CRLF)
    EndSwitch
    EndSwitch
    $counter +=1
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]


    So müsste es hinhauen.

  • @ ideas2code ah ist eine nette lösung. Und ich hab wieder um tausend ecken gedacht ^^ thx
    nuts nicht ganz. das Funktioniert insofern nur, wenn das inputfeld nicht von vornherein schon im focus sitzt

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Worin liegt da genau die Praixsrelevanz?

    hier : ^^

    Spoiler anzeigen
    [autoit]

    Func nebenGUI()
    $aDate = StringSplit(GUICtrlRead($Date),"/")
    Global $hnebenGUI = GUICreate(GUICtrlRead($Date),200,200)
    Global $nebenGUIInput = GUICtrlCreateInput("Gibt hier deine Stundenzahl ein!",20,50,160,20)
    Global $button = GUICtrlCreateButton("Speichern", 50, 150)
    local $oneclick = 1
    GUISetState()

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_PRIMARYDOWN
    If $oneclick Then
    $cInfo = GUIGetCursorInfo()
    If IsArray($cInfo) Then
    If $cInfo[4] = $nebenGUIInput Then
    GUICtrlSetData($nebenGUIInput,"")
    $oneclick = 0
    EndIf
    EndIf
    EndIf
    Case $GUI_EVENT_CLOSE
    If MsgBox(4+32, "Beenden", "Willst du ohne zu Speichern Beenden") = 6 Then
    GUIDelete($hnebenGUI)
    ExitLoop
    EndIf
    EndSwitch
    WEnd
    EndFunc

    [/autoit]

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Also bei mir funktioniert diese Methode problemlos.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    $Form1 = GUICreate("Form1", 237, 140, 192, 124)
    $Label = GUICtrlCreateLabel("", 56, 48, 121, 21)
    $Input1 = GUICtrlCreateInput("Standard", 56, 48, 121, 21)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Label
    GUICtrlSetData($Input1, "")
    EndSwitch
    WEnd

    [/autoit]
  • ja wie ich dir ja schon gesagt hab funktioniert supi nur ich fand es einfach nicht ideal einfach noch ein label hiner mein input zu legen

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Ich verstehe nicht wo da das Problem liegt. ?(
    Schließlich sieht man das doch nicht. Die Performance wird genausowenig beeinträchtigt. ^^
    Oder gibt es ein anderes Problem?

    na klar wegen dem einen Label hab ich jetzt ne cpu auslastung von 98 % ^^
    nein spaß ich wusste einfach nciht, was da für komplikationen auftreten können, wenn 2 ctrl direkt übereinanderliegen

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • so ist mein aktueller stand jetzt passt was mit regexp nicht so ein ...
    es soll ganz einfach wenn schon ein eintrag unter dem aktuell ausgewählten datum vorliegt nichts in die datei schreiben

    Spoiler anzeigen
    [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_PRIMARYDOWN
    If $oneclick Then
    $cInfo = GUIGetCursorInfo()
    If IsArray($cInfo) Then
    If $cInfo[4] = $nebenGUIInput Then
    GUICtrlSetData($nebenGUIInput,"")
    $oneclick = 0
    EndIf
    EndIf
    EndIf
    Case $GUI_EVENT_CLOSE
    If MsgBox(4+32, "Beenden", "Willst du ohne zu Speichern Beenden") = 6 Then
    GUIDelete($hnebenGUI)
    ExitLoop
    EndIf
    Case $Speichern_Button
    If Not FileExists (@ScriptDir & "\Zeiten.txt")Then
    MsgBox(48,"Nicht gefunden!", "Zeitendatei wurde nicht gefunden es wird nun eine Datei angelegt")
    $notexist = FileOpen(@ScriptDir & "\Zeiten.txt",1)
    FileClose($notexist)
    EndIf
    $readfile = FileOpen(@ScriptDir & "\Zeiten.txt",0)
    If $readfile = -1 Then
    MsgBox(48,"Fehler","Zeitendatei konnte nicht richtig geöffnet werden bitte wiederholen sie den Vorgang")
    Else
    ConsoleWrite(GUICtrlRead($Date) & @CRLF)
    ConsoleWrite(FileRead($readfile) & @CRLF)
    $sreadfile = FileRead($readfile)
    $sDate = GUICtrlRead($Date)
    If Not StringRegExp($sreadfile,$sDate) Then
    MsgBox(0,"",@error)
    FileClose($readfile)
    $writefile = FileOpen(@ScriptDir & "\Zeiten.txt",1)
    FileWrite($writefile,GUICtrlRead($Date) & " : " & GUICtrlRead($nebenGUIInput) & @CRLF)
    MsgBox(48,"Fertig","Zeit wurde gespeichert")
    FileClose($writefile)
    EndIf
    EndIf
    EndSwitch
    WEnd
    EndFunc

    [/autoit]

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Wieso nimmst du nicht einfach StringInStr oder willst du noch andere Sachen überprüfen?

    neh wills wie Seubo machen und überall wo es nur geht ein Stringregexp einbauen ^^

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Ich finde es besser, sollte es möglich sein, bei den schnellen autoiteigenen String-Funktionen zu bleiben aber ok:

    [autoit]


    $search = "Hallo das ist ein Test"
    $smatch ="Test"
    If Not StringRegExp($search,$smatch) Then
    MsgBox(1, "", "Kein Treffer gefunden")
    ElseIf StringRegExp($search,$smatch) then
    MsgBox(1, "", "Treffer")
    endif

    [/autoit]


    So dann - bei dir stimmen vielleicht die Variabeln nicht?

  • Hier ein Beispiel für das Prüfen eines Datums:

    [autoit]

    $Testdatum = "23:59"
    $Reg = StringRegExp($Testdatum, "[01][0-9]:[0-5][0-9]|2[0-3]:[0-5][0-9]")
    If $Reg Then
    MsgBox(0,"Datum","Richtig")
    Else
    MsgBox(0,"Datum","Falsch")
    Endif

    [/autoit]


    (Sollte keine falschen Daten zulassen - Keine Garantie, da ich (noch) kein Profi bin :P )

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • ich hab das ganze gerade auch mit StringInStr probiert funtz nicht mal da. Der muss wohl ein prob. mit dem string haben, denn wenn ich den string einfach zu testen manuell eingebe funzt es wennich ihn aus der datei lesen lasse geht es nicht.
    aber die datei wird da definitiv gelesen, deshalb hab ich ja den consolewrithe mit drinne, sodass ich sehen kann ob er die datei ausließt aber das geht.
    Ich habe ja nach jeder neuen anfügung von daten ein @CRLF drinne aber das dürfe doch auch kein Prob sein oder?

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • das ist lieb gemeinst aber ich will nicht alles datums finden sondern genau das eine und wenn dieses gefunden wurde soll er nix in die datei schreiben. wenn es nicht geunden wurde soll das datum und die eingegebene zahl in die datei geschrieben werden

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.