ListView Eintrag

  • Kann mir jemand von euch sagen wie ich eine Funktion auslösen lassen kann wenn ich einen Eintrag in einem ListView anklicke? Den Eintrag will ich dann in eine Input Box schreiben. Bisher hab ich das:

    [autoit]


    ;[...]
    Case $Button9
    $selid = _GUICtrlListView_GetSelectionMark($ListView1)
    $sel = _GUICtrlListView_GetItemTextArray($ListView1, $selid)
    GUICtrlSetData($Input1, $sel[1])
    ;[...]

    [/autoit]

    Allerdings funzt das nur wenn ich auf nen Button klicke. Aber wie schaff ich das wenn ich auf nen EIntrag klicke?

    Ich hoffe ihr könnt mir helfen :(


    Achja: Einfach in ne While schleife

    [autoit]

    $selid = _GUICtrlListView_GetSelectionMark($ListView1)
    $sel = _GUICtrlListView_GetItemTextArray($ListView1, $selid)
    GUICtrlSetData($Input1, $sel[1])

    [/autoit]


    kann ich nicht denn sonst würde ich ja nichtsmehr von Hand in die InputBox schreiben können ^^
    Deshalb eben nur wenn ich nen Eintrag anklicken.

  • Hi probiers mal so:

    Spoiler anzeigen
    [autoit]

    #include<GUIConstants.au3>
    #include<GuiListView.au3>
    GUICreate("listview items",220,250, 100,200,-1,$WS_EX_ACCEPTFILES)
    GUISetBkColor (0x00E0FFFF) ; will change background color
    $listview = GUICtrlCreateListView ("col1 |col2|col3 ",10,10,200,150);,$LVS_SORTDESCENDING)
    $item1=GUICtrlCreateListViewItem("item2|col22|col23",$listview)
    $item2=GUICtrlCreateListViewItem("item1|col12|col13",$listview)
    $item3=GUICtrlCreateListViewItem("item3|col32|col33",$listview)
    $input1=GUICtrlCreateInput("",20,200, 150)
    GUICtrlSetState(-1,$GUI_DROPACCEPTED) ; to allow drag and dropping
    GUISetState()
    GUICtrlSetData($item2,"ITEM1")
    GUICtrlSetData($item3,"||COL33")
    GUICtrlDelete($item1)
    $merken = ""
    Do
    $msg = GUIGetMsg ()

    Select
    Case $msg = $GUI_EVENT_CLOSE
    EXIT
    EndSelect

    $vergleich = _GUICtrlListView_GetSelectedIndices($listview, 0)
    If $merken <> $vergleich Then
    $selid = _GUICtrlListView_GetSelectionMark($ListView)
    $sel = _GUICtrlListView_GetItemTextArray($ListView, $selid)
    GUICtrlSetData($Input1, $sel[1])
    $merken = $vergleich
    EndIf
    $vergleich = GUICtrlRead($Input1)
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]
  • danke funktioniert soweit. Die Zeile

    [autoit]

    $vergleich = GUICtrlRead($Input1)

    [/autoit]


    mann man allerdings rauslassen ;)
    Aber irgendwie reagiert mir da ding noch zu langsam. Hast du sonst noch eine Idee?
    Edit: Die anderen Buttons funktionieren auch nicht mehr richtig. Erst nach merhmaligen klicken :(

  • sry kannste gerne haben ^^
    Das Programm soll ich für meinen Vater machen und soll so eine Art Filmmanager werden ;) :

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <GuiListView.au3>
    #Include <GUIComboBox.au3>
    #include <GUIConstants.au3>
    #NoTrayIcon

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

    Local $ListView1, $exStyles = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES), $hListView
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Filmmanager v2.1 (c) Carsten Schneider", 588, 355, 332, 186)
    GUISetBkColor(0xC0DCC0)
    GUISetCursor(14)
    $ListView1 = _GUICtrlListView_Create($Form1, "Name|VHS|DVD|CZ", 3, 3, 334, 304, -1, 0x00000020)
    _GUICtrlListView_SetExtendedListViewStyle ($ListView1, $exStyles)
    _GUICtrlListView_SetColumnWidth($ListView1, 0, 197)
    _GUICtrlListView_SetColumnWidth($ListView1, 1, 40)
    _GUICtrlListView_SetColumnWidth($ListView1, 2, 40)
    _GUICtrlListView_SetColumnWidth($ListView1, 3, 40)
    $Button1 = GUICtrlCreateButton("Film entfernen", 339, 228, 246, 43, 0)
    $Label1 = GUICtrlCreateLabel("Filmname:", 339, 6, 117, 33)
    GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x000000)
    $Input1 = GUICtrlCreateInput("", 339, 42, 244, 2 8)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("Typ:", 339, 78, 51, 33)
    GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x000000)
    $Combo1 = GUICtrlCreateCombo("", 339, 114, 244, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "VHS|DVD|CZ")
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    _GUICtrlComboBox_SetCurSel($Combo1, 0)
    $Button3 = GUICtrlCreateButton("Ausgewählten Film bearbeiten", 339, 144, 246, 43, 0)
    $Button4 = GUICtrlCreateButton("Neuen Film erstellen", 339, 186, 246, 43, 0)
    $Button5 = GUICtrlCreateButton("Filmliste neu laden und sortieren", 2, 309, 336, 43, 0)
    GUICtrlSetState($Input1, $GUI_FOCUS)
    $Button6 = GUICtrlCreateButton("Schließen", 339, 270, 246, 39, 0)
    $Button7 = GUICtrlCreateButton("Suchen", 462, 309, 123, 43)
    $Button8 = GUICtrlCreateButton("Liste drucken", 339, 309, 123, 43, 0)
    $Button9 = GUICtrlCreateButton("Abrufen", 460, 3, 123, 35)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $merken = ""

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

    Func _laden()
    If FileExists("data.ini") Then
    $count = IniReadSectionNames("data.ini")
    SplashTextOn("", "Daten werden geladen (" & $count[0] & " Filme) ...", 300, 50, -1, -1, 33)
    _GUICtrlListView_DeleteAllItems($ListView1)
    $dataname = IniReadSectionNames("data.ini")
    For $i = 1 to $dataname[0]
    $datatyp = IniRead("data.ini", $dataname[$i], "typ", "Error")
    _GUICtrlListView_AddItem($ListView1, $dataname[$i], $i)
    If $datatyp = "VHS" Then
    _GUICtrlListView_AddSubItem($ListView1, $i - 1, " X", 1)
    ElseIf $datatyp = "DVD" Then
    _GUICtrlListView_AddSubItem($ListView1, $i - 1, " X", 2)
    ElseIf $datatyp = "CZ" Then
    _GUICtrlListView_AddSubItem($ListView1, $i - 1, " X", 3)
    EndIf
    Next
    Else
    MsgBox(0, "Error", "Filme konnten nicht geladen werden da die Datei 'data.ini' nicht gefunden wurde. Datei wird nach dem ersten neu erstellten Film erstellt.")
    EndIf
    SplashOff()
    _sort()
    EndFunc

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

    Func _sort()
    $count = _GUICtrlListView_GetItemCount($ListView1)
    SplashTextOn("", "Filme werden sortiert (" & $count & " Filme) ...", 300, 50, -1, -1, 33)
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount ($ListView1) ]
    _GUICtrlListView_SimpleSort($ListView1, $B_DESCENDING, 0)
    SplashOff()
    EndFunc

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

    _laden()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button6
    Exit
    Case $Button5
    _laden()
    Case $Button4
    $newname = GUICtrlRead($input1)
    $newtyp = GUICtrlRead($Combo1)
    If $newname = "" Then
    MsgBox(0, "Error", "Bitte geben Sie einen Filmname ein.")
    Else
    IniWrite("data.ini", $newname, "typ", $newtyp)
    EndIf
    _laden()
    Case $Button3
    $selected = _GUICtrlListView_GetSelectedIndices($ListView1)
    $newname = GUICtrlRead($input1)
    $newtyp = GUICtrlRead($Combo1)
    If $newname = "" Then
    MsgBox(0, "Error", "Bitte geben Sie einen Filmname ein.")
    ElseIf $selected = "-1" Then
    MsgBox(0, "Error", "Bitte wählen Sie einen Film zum editieren aus.")
    Else
    $selectedname = _GUICtrlListView_GetItemText($ListView1, $selected)
    IniDelete("data.ini", $selectedname)
    IniWrite("data.ini", $newname, "typ", $newtyp)
    EndIf
    _laden()
    Case $Button1
    $selected = _GUICtrlListView_GetSelectedIndices($ListView1)
    If $selected = "-1" Then
    MsgBox(0, "Error", "Bitte wählen Sie einen Film zum löschen aus.")
    Else
    $selectedname = _GUICtrlListView_GetItemText($ListView1, $selected)
    IniDelete("data.ini", $selectedname)
    EndIf
    _laden()
    Case $Button7
    $suchbegriff = InputBox("Suche", "Bitte geben Sie einen Suchbegriff ein" & @CRLF & "ACHTUNG: Groß- und Kleinschriebung beachten!")
    $suche = _GUICtrlListView_FindText($ListView1, $suchbegriff)
    If $suche = -1 Then
    MsgBox(0, "Error", "Es konnte kein Film gefunden werden.")
    Else
    _GUICtrlListView_SetItemSelected($ListView1, $suche)
    MsgBox(0, "Suche", "Der gesuchte Film wurde markiert. Bitte beachten Sie dass das automatische scrollen noch nicht möglich ist.")
    EndIf
    Case $Button9
    $selid = _GUICtrlListView_GetSelectionMark($ListView1)
    $sel = _GUICtrlListView_GetItemTextArray($ListView1, $selid)
    GUICtrlSetData($Input1, $sel[1])
    If $sel[4] = " X" Then
    GUICtrlSetData($Combo1, "CZ")
    ElseIf $sel[3] = " X" Then
    GUICtrlSetData($Combo1, "DVD")
    ElseIf $sel[2] = " X" Then
    GUICtrlSetData($Combo1, "VHS")
    EndIf
    Case $Button8
    SplashTextOn("", "Druckvorgang wird vorbereitet...", 300, 50, -1, -1, 33)
    If FileExists("data.ini") Then
    $datacount = _GUICtrlListView_GetItemCount ($ListView1)
    $printfile = @TempDir & "\" & random(0, 999, 1) & ".txt"
    For $i = 1 to $datacount
    $e = $i - 1
    $data = _GUICtrlListView_GetItemTextArray($ListView1, $e)
    If $data[4] = " X" Then
    FileWriteLine($printfile, "[CZ ]" & $data[1])
    ElseIf $data[3] = " X" Then
    FileWriteLine($printfile, "[DVD]" & $data[1])
    ElseIf $data[2] = " X" Then
    FileWriteLine($printfile, "[VHS]" & $data[1])
    EndIf
    Next
    EndIf
    SplashOff()
    SplashTextOn("", "Drucken...", 300, 50, -1, -1, 33)
    $print = _FilePrint($printfile)
    SplashOff()
    If $print Then
    MsgBox(0, "Druckvorgang", "Der Druckvorgang wurde erfolgreich an Ihren Standarddrucker gestartet!")
    Else
    MsgBox(0, "Druckvorgang", "Error: " & @error & @CRLF & "Datei konnte nicht gedruckt werden.")
    EndIf
    EndSwitch
    WEnd

    [/autoit]


    Gruß
    Carsten ^^

    Edit bernd670: Spoiler-Tags gesetzt!

    • Offizieller Beitrag


    Edit: Die anderen Buttons funktionieren auch nicht mehr richtig. Erst nach merhmaligen klicken :(

    Hmmm....kann ich nicht bestätigen. Funktioniert soweit alles. Wobei mir der Button 'Ausgewählten Film bearbeiten' nicht verständlich wird.
    Und Listview scheint Probleme beim scrollen mit dem Mausrad zu haben (siehe Screenshot).

    tmp_monatsansicht.txt

    Wobei genau brauchst Du denn jetzt Hilfe?

  • Also. Bei mir geht das Scrollen perfekt liegt warscheinlich bei dir ;)
    Das mit dem Bearbeiten heißt, das ich den Film der gerade ausgewählt wurde eben ändern (also umbenennen) kann.
    Du siehst doch den Button Abrufen oder? Wenn man da draufklickt wird der Film in der Liste nach rechts in die Input box übernommen. Das funzt auch. ALlerdings will ichs so, wenn ich auf einen anderen Eintrag im ListView1 klicke nicht erst auf den Button klicken muss sondern der Film soll schon beim klicken übernommen werden (also automatisch).

  • Hi,

    also bei mir funktioniert der Scroll auch nicht perfekt. Manchmal sieht es so aus wie auf dem Screenshot.

    Dass die Daten beim Klick auf einen ListView Eintrag in das Editfeld übernommen werden hab ich dir doch oben beschrieben.

    Dies funktioniert einwandfrei :rofl:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIComboBox.au3>
    #Include <GuiListView.au3>
    #include <File.au3>
    #NoTrayIcon
    Local $ListView1, $exStyles = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES), $hListView
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Filmmanager v2.1 (c) Carsten Schneider", 588, 355, 332, 186)
    GUISetBkColor(0xC0DCC0)
    GUISetCursor(14)
    $ListView1 = _GUICtrlListView_Create($Form1, "Name|VHS|DVD|CZ", 3, 3, 334, 304, -1, 0x00000020)
    _GUICtrlListView_SetExtendedListViewStyle ($ListView1, $exStyles)
    _GUICtrlListView_SetColumnWidth($ListView1, 0, 197)
    _GUICtrlListView_SetColumnWidth($ListView1, 1, 40)
    _GUICtrlListView_SetColumnWidth($ListView1, 2, 40)
    _GUICtrlListView_SetColumnWidth($ListView1, 3, 40)
    $Button1 = GUICtrlCreateButton("Film entfernen", 339, 228, 246, 43, 0)
    $Label1 = GUICtrlCreateLabel("Filmname:", 339, 6, 117, 33)
    GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x000000)
    $Input1 = GUICtrlCreateInput("", 339, 42, 244, 28)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("Typ:", 339, 78, 51, 33)
    GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x000000)
    $Combo1 = GUICtrlCreateCombo("", 339, 114, 244, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "VHS|DVD|CZ")
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    _GUICtrlComboBox_SetCurSel($Combo1, 0)
    $Button3 = GUICtrlCreateButton("Ausgewählten Film bearbeiten", 339, 144, 246, 43, 0)
    $Button4 = GUICtrlCreateButton("Neuen Film erstellen", 339, 186, 246, 43, 0)
    $Button5 = GUICtrlCreateButton("Filmliste neu laden und sortieren", 2, 309, 336, 43, 0)
    GUICtrlSetState($Input1, $GUI_FOCUS)
    $Button6 = GUICtrlCreateButton("Schließen", 339, 270, 246, 39, 0)
    $Button7 = GUICtrlCreateButton("Suchen", 462, 309, 123, 43)
    $Button8 = GUICtrlCreateButton("Liste drucken", 339, 309, 123, 43, 0)
    $Button9 = GUICtrlCreateButton("Abrufen", 460, 3, 123, 35)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $merken = ""
    Func _laden()
    If FileExists("data.ini") Then
    $count = IniReadSectionNames("data.ini")
    SplashTextOn("", "Daten werden geladen (" & $count[0] & " Filme) ...", 300, 50, -1, -1, 33)
    _GUICtrlListView_DeleteAllItems($ListView1)
    $dataname = IniReadSectionNames("data.ini")
    For $i = 1 to $dataname[0]
    $datatyp = IniRead("data.ini", $dataname[$i], "typ", "Error")
    _GUICtrlListView_AddItem($ListView1, $dataname[$i], $i)
    If $datatyp = "VHS" Then
    _GUICtrlListView_AddSubItem($ListView1, $i - 1, " X", 1)
    ElseIf $datatyp = "DVD" Then
    _GUICtrlListView_AddSubItem($ListView1, $i - 1, " X", 2)
    ElseIf $datatyp = "CZ" Then
    _GUICtrlListView_AddSubItem($ListView1, $i - 1, " X", 3)
    EndIf
    Next
    Else
    MsgBox(0, "Error", "Filme konnten nicht geladen werden da die Datei 'data.ini' nicht gefunden wurde. Datei wird nach dem ersten neu erstellten Film erstellt.")
    EndIf
    SplashOff()
    _sort()
    EndFunc
    Func _sort()
    $count = _GUICtrlListView_GetItemCount($ListView1)
    SplashTextOn("", "Filme werden sortiert (" & $count & " Filme) ...", 300, 50, -1, -1, 33)
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount ($ListView1) ]
    _GUICtrlListView_SimpleSort($ListView1, $B_DESCENDING, 0)
    SplashOff()
    EndFunc
    _laden()
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button6
    Exit
    Case $Button5
    _laden()
    Case $Button4
    $newname = GUICtrlRead($input1)
    $newtyp = GUICtrlRead($Combo1)
    If $newname = "" Then
    MsgBox(0, "Error", "Bitte geben Sie einen Filmname ein.")
    Else
    IniWrite("data.ini", $newname, "typ", $newtyp)
    EndIf
    _laden()
    Case $Button3
    $selected = _GUICtrlListView_GetSelectedIndices($ListView1)
    $newname = GUICtrlRead($input1)
    $newtyp = GUICtrlRead($Combo1)
    If $newname = "" Then
    MsgBox(0, "Error", "Bitte geben Sie einen Filmname ein.")
    ElseIf $selected = "-1" Then
    MsgBox(0, "Error", "Bitte wählen Sie einen Film zum editieren aus.")
    Else
    $selectedname = _GUICtrlListView_GetItemText($ListView1, $selected)
    IniDelete("data.ini", $selectedname)
    IniWrite("data.ini", $newname, "typ", $newtyp)
    EndIf
    _laden()
    Case $Button1
    $selected = _GUICtrlListView_GetSelectedIndices($ListView1)
    If $selected = "-1" Then
    MsgBox(0, "Error", "Bitte wählen Sie einen Film zum löschen aus.")
    Else
    $selectedname = _GUICtrlListView_GetItemText($ListView1, $selected)
    IniDelete("data.ini", $selectedname)
    EndIf
    _laden()
    Case $Button7
    $suchbegriff = InputBox("Suche", "Bitte geben Sie einen Suchbegriff ein" & @CRLF & "ACHTUNG: Groß- und Kleinschriebung beachten!")
    $suche = _GUICtrlListView_FindText($ListView1, $suchbegriff)
    If $suche = -1 Then
    MsgBox(0, "Error", "Es konnte kein Film gefunden werden.")
    Else
    _GUICtrlListView_SetItemSelected($ListView1, $suche)
    MsgBox(0, "Suche", "Der gesuchte Film wurde markiert. Bitte beachten Sie dass das automatische scrollen noch nicht möglich ist.")
    EndIf
    Case $Button9
    $selid = _GUICtrlListView_GetSelectionMark($ListView1)
    $sel = _GUICtrlListView_GetItemTextArray($ListView1, $selid)
    GUICtrlSetData($Input1, $sel[1])
    If $sel[4] = " X" Then
    GUICtrlSetData($Combo1, "CZ")
    ElseIf $sel[3] = " X" Then
    GUICtrlSetData($Combo1, "DVD")
    ElseIf $sel[2] = " X" Then
    GUICtrlSetData($Combo1, "VHS")
    EndIf
    Case $Button8
    SplashTextOn("", "Druckvorgang wird vorbereitet...", 300, 50, -1, -1, 33)
    If FileExists("data.ini") Then
    $datacount = _GUICtrlListView_GetItemCount ($ListView1)
    $printfile = @TempDir & "\" & random(0, 999, 1) & ".txt"
    For $i = 1 to $datacount
    $e = $i - 1
    $data = _GUICtrlListView_GetItemTextArray($ListView1, $e)
    If $data[4] = " X" Then
    FileWriteLine($printfile, "[CZ ]" & $data[1])
    ElseIf $data[3] = " X" Then
    FileWriteLine($printfile, "[DVD]" & $data[1])
    ElseIf $data[2] = " X" Then
    FileWriteLine($printfile, "[VHS]" & $data[1])
    EndIf
    Next
    EndIf
    SplashOff()
    SplashTextOn("", "Drucken...", 300, 50, -1, -1, 33)
    $print = _FilePrint($printfile)
    SplashOff()
    If $print Then
    MsgBox(0, "Druckvorgang", "Der Druckvorgang wurde erfolgreich an Ihren Standarddrucker gestartet!")
    Else
    MsgBox(0, "Druckvorgang", "Error: " & @error & @CRLF & "Datei konnte nicht gedruckt werden.")
    EndIf
    EndSwitch

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

    $vergleich = _GUICtrlListView_GetSelectedIndices($ListView1, 0)
    If $merken <> $vergleich Then
    $selid = _GUICtrlListView_GetSelectionMark($ListView1)
    $sel = _GUICtrlListView_GetItemTextArray($ListView1, $selid)
    GUICtrlSetData($Input1, $sel[1])
    If $sel[4] = " X" Then
    GUICtrlSetData($Combo1, "CZ")
    ElseIf $sel[3] = " X" Then
    GUICtrlSetData($Combo1, "DVD")
    ElseIf $sel[2] = " X" Then
    GUICtrlSetData($Combo1, "VHS")
    EndIf
    $merken = $vergleich
    EndIf
    WEnd

    [/autoit]
  • was schon aufgeben, das geht ja mal gar nicht :rofl:

    Wie viele Daten haste denn drin in deiner ini?

    Welcher Button geht denn zeitverzögert?

  • Hi,

    hm, habs mal mit 500 Einträgen probiert.

    Es liegt wohl an

    [autoit]

    $vergleich = _GUICtrlListView_GetSelectedIndices($ListView1, 0)

    [/autoit]

    Es wird halten dauernd geprüft, ob ein anderer Eintrag markiert wurde.

    Habe leider keine Ahnung wie man dies optimieren könnte 8|

    Mich würde jedoch eine Lösung brennend interessieren :)

    • Offizieller Beitrag

    Hallo,

    wenn Du einen Klick auf einen Eintrag des Listview abfangen willst mußt Du eine neue Eventfunktion für WM_NOTIFY schreiben und registrieren!

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <GuiListView.au3>
    #Include <GUIComboBox.au3>
    #include <GUIConstants.au3>
    #NoTrayIcon

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

    Local $ListView1, $exStyles = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES), $hListView
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Filmmanager v2.1 (c) Carsten Schneider", 588, 355, 332, 186)
    GUISetBkColor(0xC0DCC0)
    GUISetCursor(14)
    $ListView1 = _GUICtrlListView_Create($Form1, "Name|VHS|DVD|CZ", 3, 3, 334, 304, -1, 0x00000020)
    _GUICtrlListView_SetExtendedListViewStyle ($ListView1, $exStyles)
    _GUICtrlListView_SetColumnWidth($ListView1, 0, 197)
    _GUICtrlListView_SetColumnWidth($ListView1, 1, 40)
    _GUICtrlListView_SetColumnWidth($ListView1, 2, 40)
    _GUICtrlListView_SetColumnWidth($ListView1, 3, 40)
    $Button1 = GUICtrlCreateButton("Film entfernen", 339, 228, 246, 43, 0)
    $Label1 = GUICtrlCreateLabel("Filmname:", 339, 6, 117, 33)
    GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x000000)
    $Input1 = GUICtrlCreateInput("", 339, 42, 244, 28)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("Typ:", 339, 78, 51, 33)
    GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x000000)
    $Combo1 = GUICtrlCreateCombo("", 339, 114, 244, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "VHS|DVD|CZ")
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    _GUICtrlComboBox_SetCurSel($Combo1, 0)
    $Button3 = GUICtrlCreateButton("Ausgewählten Film bearbeiten", 339, 144, 246, 43, 0)
    $Button4 = GUICtrlCreateButton("Neuen Film erstellen", 339, 186, 246, 43, 0)
    $Button5 = GUICtrlCreateButton("Filmliste neu laden und sortieren", 2, 309, 336, 43, 0)
    GUICtrlSetState($Input1, $GUI_FOCUS)
    $Button6 = GUICtrlCreateButton("Schließen", 339, 270, 246, 39, 0)
    $Button7 = GUICtrlCreateButton("Suchen", 462, 309, 123, 43)
    $Button8 = GUICtrlCreateButton("Liste drucken", 339, 309, 123, 43, 0)
    $Button9 = GUICtrlCreateButton("Abrufen", 460, 3, 123, 35)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    $merken = ""

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

    Func _laden()
    If FileExists("data.ini") Then
    $count = IniReadSectionNames("data.ini")
    SplashTextOn("", "Daten werden geladen (" & $count[0] & " Filme) ...", 300, 50, -1, -1, 33)
    _GUICtrlListView_DeleteAllItems($ListView1)
    $dataname = IniReadSectionNames("data.ini")
    For $i = 1 to $dataname[0]
    $datatyp = IniRead("data.ini", $dataname[$i], "typ", "Error")
    _GUICtrlListView_AddItem($ListView1, $dataname[$i], $i)
    If $datatyp = "VHS" Then
    _GUICtrlListView_AddSubItem($ListView1, $i - 1, " X", 1)
    ElseIf $datatyp = "DVD" Then
    _GUICtrlListView_AddSubItem($ListView1, $i - 1, " X", 2)
    ElseIf $datatyp = "CZ" Then
    _GUICtrlListView_AddSubItem($ListView1, $i - 1, " X", 3)
    EndIf
    Next
    Else
    MsgBox(0, "Error", "Filme konnten nicht geladen werden da die Datei 'data.ini' nicht gefunden wurde. Datei wird nach dem ersten neu erstellten Film erstellt.")
    EndIf
    SplashOff()
    _sort()
    EndFunc

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

    Func _sort()
    $count = _GUICtrlListView_GetItemCount($ListView1)
    SplashTextOn("", "Filme werden sortiert (" & $count & " Filme) ...", 300, 50, -1, -1, 33)
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount ($ListView1) ]
    _GUICtrlListView_SimpleSort($ListView1, $B_DESCENDING, 0)
    SplashOff()
    EndFunc

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

    _laden()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button6
    Exit
    Case $Button5
    _laden()
    Case $Button4
    $newname = GUICtrlRead($input1)
    $newtyp = GUICtrlRead($Combo1)
    If $newname = "" Then
    MsgBox(0, "Error", "Bitte geben Sie einen Filmname ein.")
    Else
    IniWrite("data.ini", $newname, "typ", $newtyp)
    EndIf
    _laden()
    Case $Button3
    $selected = _GUICtrlListView_GetSelectedIndices($ListView1)
    $newname = GUICtrlRead($input1)
    $newtyp = GUICtrlRead($Combo1)
    If $newname = "" Then
    MsgBox(0, "Error", "Bitte geben Sie einen Filmname ein.")
    ElseIf $selected = "-1" Then
    MsgBox(0, "Error", "Bitte wählen Sie einen Film zum editieren aus.")
    Else
    $selectedname = _GUICtrlListView_GetItemText($ListView1, $selected)
    IniDelete("data.ini", $selectedname)
    IniWrite("data.ini", $newname, "typ", $newtyp)
    EndIf
    _laden()
    Case $Button1
    $selected = _GUICtrlListView_GetSelectedIndices($ListView1)
    If $selected = "-1" Then
    MsgBox(0, "Error", "Bitte wählen Sie einen Film zum löschen aus.")
    Else
    $selectedname = _GUICtrlListView_GetItemText($ListView1, $selected)
    IniDelete("data.ini", $selectedname)
    EndIf
    _laden()
    Case $Button7
    $suchbegriff = InputBox("Suche", "Bitte geben Sie einen Suchbegriff ein" & @CRLF & "ACHTUNG: Groß- und Kleinschriebung beachten!")
    $suche = _GUICtrlListView_FindText($ListView1, $suchbegriff)
    If $suche = -1 Then
    MsgBox(0, "Error", "Es konnte kein Film gefunden werden.")
    Else
    _GUICtrlListView_SetItemSelected($ListView1, $suche)
    MsgBox(0, "Suche", "Der gesuchte Film wurde markiert. Bitte beachten Sie dass das automatische scrollen noch nicht möglich ist.")
    EndIf
    Case $Button9
    $selid = _GUICtrlListView_GetSelectionMark($ListView1)
    $sel = _GUICtrlListView_GetItemTextArray($ListView1, $selid)
    GUICtrlSetData($Input1, $sel[1])
    If $sel[4] = " X" Then
    GUICtrlSetData($Combo1, "CZ")
    ElseIf $sel[3] = " X" Then
    GUICtrlSetData($Combo1, "DVD")
    ElseIf $sel[2] = " X" Then
    GUICtrlSetData($Combo1, "VHS")
    EndIf
    Case $Button8
    SplashTextOn("", "Druckvorgang wird vorbereitet...", 300, 50, -1, -1, 33)
    If FileExists("data.ini") Then
    $datacount = _GUICtrlListView_GetItemCount ($ListView1)
    $printfile = @TempDir & "\" & random(0, 999, 1) & ".txt"
    For $i = 1 to $datacount
    $e = $i - 1
    $data = _GUICtrlListView_GetItemTextArray($ListView1, $e)
    If $data[4] = " X" Then
    FileWriteLine($printfile, "[CZ ]" & $data[1])
    ElseIf $data[3] = " X" Then
    FileWriteLine($printfile, "[DVD]" & $data[1])
    ElseIf $data[2] = " X" Then
    FileWriteLine($printfile, "[VHS]" & $data[1])
    EndIf
    Next
    EndIf
    SplashOff()
    SplashTextOn("", "Drucken...", 300, 50, -1, -1, 33)
    $print = _FilePrint($printfile)
    SplashOff()
    If $print Then
    MsgBox(0, "Druckvorgang", "Der Druckvorgang wurde erfolgreich an Ihren Standarddrucker gestartet!")
    Else
    MsgBox(0, "Druckvorgang", "Error: " & @error & @CRLF & "Datei konnte nicht gedruckt werden.")
    EndIf
    EndSwitch
    WEnd

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

    ; Neue EventFunktion
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

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

    Switch $hWndFrom
    Case $ListView1

    Switch $iCode

    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    MsgBox(0,"", "Eintag wurde mit einfachklick angeklickt!")

    EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • bernd670

    stimmt sowas hab ich auch in einem meiner Script drinnen. :rofl:

    Gibts sowas auch, wenn ich mit den Pfeiltasten einen Eintrag auswähle?

  • Sry dass ich den Thread nochma hochkrame, aber kann ich irgendwo nachlesen was $iCode alles sein kann?
    Und geht das auch (oder zumindest ähnlich) mit einer InputBox? Damit meine ich bei Änderungen am Inhalt eines Inputfeldes :)

    • Offizieller Beitrag

    Für Inputs kannst du dieses verwenden:

    [autoit]

    GUIRegisterMsg($WM_COMMAND, 'MY_WM_COMMAND')
    ; ...
    ; ...
    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $hCtrl = $lParam
    If $nNotifyCode = 1024 Then ; Inhalt geändert
    If $hCtrl = GUICtrlGetHandle($Input) Then ; $Input = ID deines Inputs
    ; code
    EndIf
    ElseIf $nNotifyCode = 512 Then ; Fokus verloren
    If $hCtrl = GUICtrlGetHandle($Input) Then ; $Input = ID deines Inputs
    ; code
    EndIf
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]