Hilfe bei Suchfunktion in der Liste

  • Moin

    Ich ich habe eine Suchfunktion im Script, die auch soweit gut funktioniert :)

    Jetzt steh ich aber vor dem Problem, das in der "Liste" die Seiten doppelt und dreifach angezeigt werden nach dem ich mehrmals auf den Suche Button klickte.

    Also man kann in der Inputbox den Bustaben "V" oder "S" eingeben und dann auf den Suche Button klicken... und man bekommt mehrere "Videoportale" oder "Suchmaschinen" aufgelistet.

    Wie gesagt das Problem ist wenn man öfters auf den Suche Button klickt, das sich dann die Seiten mehrmals untereinander aufbauen.

    Ich wollte es eigentlich so haben wenn man in der Inputbox den Bustaben "V" eingibt, und dann auf Suchen, das nur der Inhalt in der Liste angezeigt wird. Und auch nach mehrmaligem klicken auf den Suche Button, sich der Inhalt nicht mehr als einmal in der Liste angezeigt.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $FormderGUI = GUICreate("GUI", 446, 287, 192, 124)
    $h_List = GUICtrlCreateList("", 8, 8, 433, 193)
    $InputBox = GUICtrlCreateInput("", 48, 216, 393, 21)
    $SucheText = GUICtrlCreateLabel("Suche", 8, 216, 35, 17)
    $suchenButton = GUICtrlCreateButton("suchen", 56, 256, 75, 25, $WS_GROUP)

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

    For $i = 0 To UBound ($suchenButton) - 1
    GUICtrlSetData ($h_List, $suchenButton[$i][0])
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $h_List
    $s_Read = GUICtrlRead ($h_List)
    For $i = 0 To UBound ($suchenButton) - 1
    If $s_Read = $suchenButton[$i][0] Then
    GUICtrlSetData ($InputBox, "")
    GUICtrlSetData ($InputBox, $suchenButton[$i][1])
    ExitLoop
    EndIf
    Next

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

    Case $suchenButton
    Switch (GUICTRLRead($InputBox))
    case "Videoportale", "V"
    GUICtrlSetData($h_List, "Youtube|Vimeo|Clipfish|MyVideo")
    case "Suchmaschinen", "S"
    GUICtrlSetData($h_List, "Google|Lycos|Yahoo|Alta Vista")

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

    Endswitch
    EndSwitch
    WEnd

    [/autoit]


    lg Ludacris

    Einmal editiert, zuletzt von Ludacris (5. September 2012 um 18:19)

  • Du mußt natürlich den alten Listen-Inhalt löschen.
    Geht ganz einfach, indem du das Listentrennzeichen (normalerweise die Pipe) den eigentlichen Daten voranstellst:

    GUICtrlSetData($h_List, "|Youtube|Vimeo|Clipfish|MyVideo")


    Hey danke :)

    Kleiner Fehler, große Wirkung.

    Jetzt habe ich aber ein anderes Problem, ist es möglich per Button Einträge in der Liste zu delegieren.

    z.B. ich klicke in der Liste auf Google/Youtube usw. und dann auf dem Button und werde über mein Standard Browser weitergeleitet zu den entsprechenden Seiten.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $FormderGUI = GUICreate("GUI", 446, 287, 192, 124)
    $h_List = GUICtrlCreateList("", 8, 8, 433, 193)
    $InputBox = GUICtrlCreateInput("", 48, 216, 393, 21)
    $SucheText = GUICtrlCreateLabel("Suche", 8, 216, 35, 17)
    $suchenButton = GUICtrlCreateButton("suchen", 56, 256, 75, 25, $WS_GROUP)
    $Button = GUICtrlCreateButton("Los", 140, 256, 50, 25)

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

    For $i = 0 To UBound ($suchenButton) - 1
    GUICtrlSetData ($h_List, $suchenButton[$i][0])
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $h_List
    $s_Read = GUICtrlRead ($h_List)
    For $i = 0 To UBound ($suchenButton) - 1
    If $s_Read = $suchenButton[$i][0] Then
    GUICtrlSetData ($InputBox, "")
    GUICtrlSetData ($InputBox, $suchenButton[$i][1])
    ExitLoop
    EndIf
    Next

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

    Case $suchenButton
    Switch (GUICTRLRead($InputBox))
    case "Videoportale", "V"
    GUICtrlSetData($h_List, "|Youtube|Vimeo|Clipfish|MyVideo")
    case "Suchmaschinen", "S"
    GUICtrlSetData($h_List, "|Google|Lycos|Yahoo|Alta Vista")

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

    Endswitch
    EndSwitch
    WEnd

    [/autoit]


    lg Ludacris

  • Nur aufrufen geht mit

    [autoit]

    ShellExecute(LINK)

    [/autoit]


    Danke, funktioniert :)

    Könnte man noch eine Fehlermeldung einbauen, wenn ein falsches Text in die InputBox eingegeben wurde?

    Spoiler anzeigen
    [autoit]

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

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

    Global $i_Inhalt[2][2] = [ _
    ["Google", "www.google.de"], _
    ["Youtube", "www.youtube.com"]]

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

    $FormderGUI = GUICreate("GUI", 446, 287, 192, 124)
    $h_List = GUICtrlCreateList("", 8, 8, 433, 193)
    $InputBox = GUICtrlCreateInput("", 48, 216, 393, 21)
    $SucheText = GUICtrlCreateLabel("Suche", 8, 216, 35, 17)
    $suchenButton = GUICtrlCreateButton("suchen", 56, 256, 75, 25, $WS_GROUP)
    $L_Los = GUICtrlCreateButton("Los", 140, 256, 50, 25)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $L_Los
    $s_Read = GUICtrlRead ($h_List)
    For $i = 0 To UBound ($i_Inhalt) - 1
    If $s_Read = $i_Inhalt[$i][0] Then ExitLoop ShellExecute ($i_Inhalt[$i][1])
    Next

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

    Case $suchenButton
    Switch (GUICTRLRead($InputBox))
    case "Videoportale", "V"
    GUICtrlSetData($h_List, "|Youtube")
    case "Suchmaschinen", "S"
    GUICtrlSetData($h_List, "|Google")

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

    Endswitch
    EndSwitch
    WEnd

    [/autoit]


    lg Ludacris

  • Moin

    Ich versuche verzweifelt in meiner Suchfunktion eine "MsgBox Error Meldung" unterzubringen.
    Die MsgBox soll eigentlich nur darauf hinweisen wenn ein falscher oder gar kein Suchbegriff in die InputBox eingegeben wurde.

    Meine Suchfunktion:

    Spoiler anzeigen
    [autoit]

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

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

    Global $i_Inhalt[2][2] = [ _
    ["Google", "www.google.de"], _
    ["Youtube", "www.youtube.com"]]

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

    $Form1 = GUICreate("GUI", 446, 287, 192, 124)
    $h_List = GUICtrlCreateList("", 8, 8, 433, 193)
    $InputBox = GUICtrlCreateInput("Hier den Titel eingeben", 48, 216, 393, 21)
    $SucheText = GUICtrlCreateLabel("Suche", 8, 216, 35, 17)
    $suchenButton = GUICtrlCreateButton("suchen", 56, 256, 75, 25, $WS_GROUP)
    $L_Los = GUICtrlCreateButton("Los", 140, 256, 50, 25)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $L_Los
    $s_Read = GUICtrlRead ($h_List)
    For $i = 0 To UBound ($i_Inhalt) - 1
    If $s_Read = $i_Inhalt[$i][0] Then ExitLoop ShellExecute ($i_Inhalt[$i][1])
    Next

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

    Case $GUI_EVENT_PRIMARYDOWN
    $cInfo = GUIGetCursorInfo()
    If IsArray($cInfo) Then
    If $cInfo[4] = $InputBox Then
    GUICtrlSetData($InputBox, "")
    EndIf
    EndIf

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

    Case $suchenButton
    Switch (GUICTRLRead($InputBox))
    case "Videoportale", "V"
    GUICtrlSetData($h_List, "|Youtube")
    case "Suchmaschinen", "S"
    GUICtrlSetData($h_List, "|Google")
    EndSwitch
    EndSwitch
    WEnd

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


    Hier habe ich ein Script gefunden was die "MsgBox Error Meldung" ausgibt, aber ich kriege es beim besten Willen nicht hin sie funktionstüchtig in meine Suchfunkion einzubauen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIEdit.au3>

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

    $hWnd = GUICreate("Search Example", 300, 350)
    $cEdit_Text = _GUICtrlEdit_Create($hWnd, "", 5, 5, 290, 290, BitOR(0x0040, 0x0100, 0x0004, 0x00200000))
    $cInput_Searchstring = GUICtrlCreateInput("Suchwort", 5, 300, 235, 25)
    $cButton_Search = GUICtrlCreateButton("Suchen", 245, 300, 50, 25)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _GUICtrlEdit_Destroy($cEdit_Text)
    Exit
    Case $cButton_Search
    $aSearch = _SearchString(_GUICtrlEdit_GetText($cEdit_Text), GUICtrlRead($cInput_Searchstring))
    Switch @error
    Case 0
    _GUICtrlEdit_SetSel($cEdit_Text, $aSearch[0] - 1, $aSearch[1] - 1)
    ControlFocus($hWnd, "", $cEdit_Text)
    Case 1
    MsgBox(16, "Fehler", "String wurde nicht gefunden.")
    Case 2
    MsgBox(16, "Fehler", "Kein Suchwort eingegeben oder Textfeld leer.")
    EndSwitch
    EndSwitch
    WEnd

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

    Func _SearchString($sText_Search, $sSearchString)
    If StringReplace($sText_Search, " ", "") = "" Or StringReplace($sSearchString, " ", "") = "" Then Return SetError(2, 0, 0)

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

    $iStringInStr = StringInStr($sText_Search, $sSearchString)
    If Not $iStringInStr Then Return SetError(1, 0, 0)

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

    Local $aReturn[2] = [$iStringInStr, $iStringInStr + StringLen($sSearchString)]
    Return $aReturn
    EndFunc

    [/autoit]


    lg Ludacris

  • So? ;)

    Code
    [autoit]


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

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

    Global $i_Inhalt[2][2] = [ _
    ["Google", "www.google.de"], _
    ["Youtube", "www.youtube.com"]]

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

    $Form1 = GUICreate("GUI", 446, 287, 192, 124)
    $h_List = GUICtrlCreateList("", 8, 8, 433, 193)
    $InputBox = GUICtrlCreateInput("Hier den Titel eingeben", 48, 216, 393, 21)
    $SucheText = GUICtrlCreateLabel("Suche", 8, 216, 35, 17)
    $suchenButton = GUICtrlCreateButton("suchen", 56, 256, 75, 25, $WS_GROUP)
    $L_Los = GUICtrlCreateButton("Los", 140, 256, 50, 25)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $L_Los
    $s_Read = GUICtrlRead ($h_List)
    For $i = 0 To UBound ($i_Inhalt) - 1
    If $s_Read = $i_Inhalt[$i][0] Then ExitLoop ShellExecute ($i_Inhalt[$i][1])
    Next

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

    Case $GUI_EVENT_PRIMARYDOWN
    $cInfo = GUIGetCursorInfo()
    If IsArray($cInfo) Then
    If $cInfo[4] = $InputBox Then
    GUICtrlSetData($InputBox, "")
    EndIf
    EndIf

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

    Case $suchenButton
    Switch (GUICTRLRead($InputBox))
    case "Videoportale", "V"
    GUICtrlSetData($h_List, "|Youtube")
    case "Suchmaschinen", "S"
    GUICtrlSetData($h_List, "|Google")
    Case Else
    MsgBox(16,"Error","Fehlerhafter Suchstring!")
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    Der relevante Codeteil ist dieser hier:

    [autoit]


    Case Else
    MsgBox(16,"Error","Fehlerhafter Suchstring!"

    [/autoit]

    Was Zeile 2 macht, dürfte klar sein. ;)
    Else kennst du bestimmt von dem Schlüsselwort If.
    Hier macht Else dasselbe: Wenn keine von den anderen Bedingungen erfüllt wird, dann wird "Case Else" aufgerufen.

    lg chess

  • Hey danke :)

    Ich dachte die Lösung meines Problems wäre größer !!!

    Wie man sich da mal wieder täuschen kann, es sind oft die kleinen Dinge die einem die richtige Antwort sagen ^^

    lg Ludacris