Suchfunktion Hilfe

  • Guten Tag,

    ich würde gerne ein Tool machen mit der Suchfunktion wie bei der Autoit Hilfe. Wenn man dann auf das gefundene Suchwort klickt, dann sollen wie bei der Autoit Hilfe auch mehrere Informationen darüber angezeigt werden.

    Wo kann ich denn nun die Wörter eingeben, die gefunden werden können?

    Und wie kann ich es machen, dass wenn man dann das gefundene Wort anklickt, dass dort Infos darüber, wie bei der Hilfedatei halt, angezeigt werden?

    Ahh nun habe ich dieses Beispielscript gefunden, jedoch komme ich damit nicht ganz klar. ( Beispielscript von Name22 )

    Spoiler anzeigen

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

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

    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, "Error!", "Das angegebene Suchwort konnte nicht gefunden werden.")
    Case 2
    MsgBox(16, "Error!", "Bitte geben sie ein Suchwort an.")
    EndSwitch
    EndSwitch
    WEnd

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

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

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

    Danke im voraus.

    3 Mal editiert, zuletzt von White (4. Juni 2011 um 11:52)

  • Mein Suchtool ist eigentlich nur dazu gedacht Wörter in einem Edit Control zu finden und sie zu markieren. Im Grunde ist die wichtigste Funktion die du für dein Vorhaben brauchst StringInStr ;). Wenn du eine Art Hilfe machen möchtest, empfehle ich dir alle Artikel, Tags und Namen in ein 2D Array zu packen. Dann kannst du später einfach das ganze Array nach dem Suchwort durchstöbern und die Suche sogar auf Tags, Inhalt, oder Überschrift limitieren.

  • Ich glaube nicht, dass ich schon so weit mit Autoit bin.

    Könnest du mir eventuell ein Beispielscript geben, der so ähnlich wie die Hilfe ist, wo z.B.

    die Wörter Tomate und Ananas drinne sind und die Tomate unter den Tags " Toma, Tomate, Tomatoes" und die Ananas unter den

    Tags " Anana , Ananas , An" zu finden ist und wenn man sie anklickt, dass dann einige Infos darüber angezeigt werden?

    Mit freundlichen Grüßen,

    White

  • white mal ne Frage du hast ein beispielscript gefunden kommst damit nicht klar und willst ein Beispielscript iwie verstehe ich das nicht so ganz!
    noch ne frage warum gehst du an sachen ran mit denen du nicht klar kommst is ja nicht das erste mal ;)
    warum machst du es nicht so wie ich step by step ?

  • So ich hoffe du verstehst das Beispiel halbwegs...

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIListView.au3>

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

    ;- Author: name22 (http://www.autoit.de)

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

    Opt("GUIOnEventMode", 1)

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

    Global $aHelp[3][4] = [[1]]
    $aHelp[1][0] = "AutoIt - Das einzig wahre"
    $aHelp[1][1] = "AutoIt, Auto, Cool, Toll, Schön, Super"
    $aHelp[1][2] = "AutoIt ist total cool!"

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

    $hWnd = GUICreate("ListView Search by name22", 400, 400)
    $cList_Help = GUICtrlCreateListView("Name|Tags", 5, 5, 390, 360)
    _GUICtrlListView_SetColumnWidth($cList_Help, 0, 230)
    _GUICtrlListView_SetColumnWidth($cList_Help, 1, 156)
    $cInput_Search = GUICtrlCreateInput("", 5, 370, 340, 25)
    GUICtrlSetFont(-1, 10)
    $cButton_Search = GUICtrlCreateButton("Search", 350, 370, 45, 25)
    GUISetState()

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

    For $i = 1 To $aHelp[0][0]
    $aHelp[$i][3] = GUICtrlCreateListViewItem($aHelp[$i][0] & "|" & $aHelp[$i][1], $cList_Help)
    GUICtrlSetOnEvent(-1, "_ListClick")
    Next

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

    GUICtrlSetOnEvent($cButton_Search, "_Search")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    While Sleep(1000)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _Search()
    $sSearch = GUICtrlRead($cInput_Search)
    If StringReplace($sSearch, " ", "") = "" Then Return MsgBox(16, "Error", "Bitte Suchwort eingeben")

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

    $aCurSel = _GUICtrlListView_GetSelectedIndices($cList_Help, True)
    If $aCurSel[0] = 0 Then
    $iIndex = 0
    Else
    $iIndex = $aCurSel[$aCurSel[0]]
    EndIf

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

    For $i = $iIndex + 1 To $aHelp[0][0]
    $iStringInStr = StringInStr($aHelp[$i][0], $sSearch)
    If $iStringInStr Then
    $iIndex = $i
    ExitLoop
    EndIf
    Next
    If Not $iStringInStr Then
    For $i = 1 To $aHelp[0][0]
    $iStringInStr = StringInStr($aHelp[$i][0], $sSearch)
    If $iStringInStr Then
    $iIndex = $i
    ExitLoop
    EndIf
    Next
    If Not $iStringInStr Then Return MsgBox(16, "Error", "Suchwort nicht gefunden")
    EndIf
    _GUICtrlListView_SetItemSelected($cList_Help, $iIndex - 1, True, True)
    GUICtrlSetState($cList_Help, $GUI_FOCUS)
    EndFunc ;==>_Search

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

    Func _ListClick()
    For $i = 1 To $aHelp[0][0]
    If $aHelp[$i][3] = @GUI_CtrlId Then
    $iIndex = $i
    ExitLoop
    EndIf
    Next

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

    MsgBox(64, $aHelp[$iIndex][0], $aHelp[$iIndex][2])
    EndFunc ;==>_ListClick

    [/autoit]
  • Danke für dein Beispielscript.

    Ich versuche schon die ganze Zeit, neue Suchwörter hinzuzufügen, doch es kommen immer wieder nur Fehlermeldungen.

    Ich habe es nun am Anfang so, doch es kommen nur Fehlermeldungen :

    Spoiler anzeigen

    Global $aHelp[3][4] = [[1]]
    $aHelp[2][0] = ["Welche Farbe kann eine Ampel haben?", "Wie heißt Peter?"]
    $aHelp[2][2] = [["AutoIt, Auto, Cool, Toll, Schön,] Super"]
    $aHelp[2][4] = ["AutoIt ist total cool!", "Boom"]

    Kannst du mir bitte sagen, wo dort der Fehler ist?

  • Schau dir am besten mal das Array Tutorial von Bugfix an (ist in seiner Signatur). Ansonsten säße ich morgen noch hier und würde dir erklären wie das geht. ;)
    Das ist eine angepasste Version meines Beispiels, welche die Daten aus einer Datei mit einer bestimmten Struktur ausließt.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIListView.au3>

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

    ;- Author: name22 (http://www.autoit.de)

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

    Opt("GUIOnEventMode", 1)

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

    #cs Aufbau der Datei
    <START>
    <TITLE:"Titel1">
    <TAGS:"Tag1">
    <TEXT:"Line1
    Line2">
    <END>
    <START>
    <TITLE:"Titel2">
    <TAGS:"Tag1, Tag2, Tag3">
    <TEXT:"Line1
    Line2
    Line3">
    <END>
    #ce

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

    $sData = FileRead(@ScriptDir & "\Data.txt")
    $aSplit = StringRegExp($sData, '(?s)<START>(.+?)<END>', 3)

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

    Global $aHelp[UBound($aSplit) + 1][4] = [[UBound($aSplit)]]

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

    For $i = 1 To $aHelp[0][0]
    $aTitle = StringRegExp($aSplit[$i - 1], '<TITLE:"(.+?)">', 1)
    $aTags = StringRegExp($aSplit[$i - 1], '<TAGS:"(.+?)">', 1)
    $aText = StringRegExp($aSplit[$i - 1], '(?s)<TEXT:"(.+?)">', 1)

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

    If IsArray($aTitle) And IsArray($aTags) And IsArray($aText) Then
    $aHelp[$i][0] = $aTitle[0]
    $aHelp[$i][1] = $aTags[0]
    $aHelp[$i][2] = $aText[0]
    EndIf
    Next

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

    $hWnd = GUICreate("ListView Search by name22", 400, 400)
    $cList_Help = GUICtrlCreateListView("Name|Tags", 5, 5, 390, 360)
    _GUICtrlListView_SetColumnWidth($cList_Help, 0, 230)
    _GUICtrlListView_SetColumnWidth($cList_Help, 1, 156)
    $cInput_Search = GUICtrlCreateInput("", 5, 370, 340, 25)
    GUICtrlSetFont(-1, 10)
    $cButton_Search = GUICtrlCreateButton("Search", 350, 370, 45, 25)
    GUISetState()

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

    For $i = 1 To $aHelp[0][0]
    $aHelp[$i][3] = GUICtrlCreateListViewItem($aHelp[$i][0] & "|" & $aHelp[$i][1], $cList_Help)
    GUICtrlSetOnEvent(-1, "_ListClick")
    Next

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

    GUICtrlSetOnEvent($cButton_Search, "_Search")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    While Sleep(1000)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _Search()
    $sSearch = GUICtrlRead($cInput_Search)
    If StringReplace($sSearch, " ", "") = "" Then Return MsgBox(16, "Error", "Bitte Suchwort eingeben")

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

    $aCurSel = _GUICtrlListView_GetSelectedIndices($cList_Help, True)
    If $aCurSel[0] = 0 Then
    $iIndex = 0
    Else
    $iIndex = $aCurSel[$aCurSel[0]] + 1
    EndIf

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

    $iStringInStr = 0
    For $i = $iIndex + 1 To $aHelp[0][0]
    $iStringInStr = StringInStr($aHelp[$i][0], $sSearch)
    If $iStringInStr Then
    $iIndex = $i
    ExitLoop
    EndIf
    Next
    If Not $iStringInStr Then
    For $i = 1 To $aHelp[0][0]
    $iStringInStr = StringInStr($aHelp[$i][0], $sSearch)
    If $iStringInStr Then
    $iIndex = $i
    ExitLoop
    EndIf
    Next
    If Not $iStringInStr Then Return MsgBox(16, "Error", "Suchwort nicht gefunden")
    EndIf
    _GUICtrlListView_SetItemSelected($cList_Help, $iIndex - 1, True, True)
    GUICtrlSetState($cList_Help, $GUI_FOCUS)
    EndFunc ;==>_Search

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

    Func _ListClick()
    For $i = 1 To $aHelp[0][0]
    If $aHelp[$i][3] = @GUI_CtrlId Then
    $iIndex = $i
    ExitLoop
    EndIf
    Next

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

    MsgBox(64, $aHelp[$iIndex][0], $aHelp[$iIndex][2])
    EndFunc ;==>_ListClick

    [/autoit]