Hi!
Ich habe ein "altes" Skript von mir mal eben mit der neuen Version getestet und musste natürlich einiges umstellen, aber mit dem bloßen Umbenennen der Funktionen war´s nicht getan.
Hier mein altes Skript:
Spoiler anzeigen
#Include <Constants.au3>
#include <GUIConstants.au3>
#include <file.au3>
#Include <Misc.au3>
#include <Array.au3>
#include <GuiListView.au3>
Dim $aAdmins[1] ;Array der auszulesenden Administrator-Profile
Dim $programmmax
Dim $profil_array
Dim $edit
Dim $aboutitem
Dim $exititem
Dim $item1
Dim $item2
Dim $item3
Dim $optiondropbox
Dim $optionmenu
Dim $optiontraytip
Dim $optionautostart
Dim $optionpasswd
Dim $optionpathcheck
Dim $traytipflag
Dim $passwdsaveflag = 0
Dim $passwd
Dim $exitflag = 0
Dim $helpitem
Dim $flagoptionsstartup
_EditIni()
;----------------------------------------------------------------------
;FUNKTION _EditIni
;Erstellt eine GUI zum Bearbeiten der data.ini
;----------------------------------------------------------------------
Func _EditIni()
$nLVSBtnState = 0 ;Wird zum Aktivieren der Buttons benötigt
TraySetState(2)
;GUI für die EditControl wird erzeugt, hierin findet die Bearbeitung der Ini-Datei statt
$editinigui = GUICreate("AdminRun", 800, 335)
GUICtrlCreateGraphic(0, 0, 800, 60)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlCreatePic(@ScriptDir & "\img\addon.bmp", 15, 20, 16, 16)
$label1 = GUICtrlCreateLabel("Menüeinträge bearbeiten", 45, 15, 300)
GUICtrlSetBkColor($label1, 0xffffff)
GUICtrlSetFont($label1, 9, 600)
$label2 = GUICtrlCreateLabel("Fügen Sie neue Einträge hinzu oder löschen Sie Einträge", 45, 30, 300)
GUICtrlSetBkColor($label2, 0xffffff)
GUICtrlSetFont($label2, 8, 400, 2)
$statuslabel1 = GUICtrlCreateLabel("", 0, 61, 801, 2, BitOR($SS_SIMPLE, $SS_SUNKEN))
$EDITINI_LISTVIEW = GUICtrlCreateListView("Programmname|Programmpfad|Status", 0, 62, 800, 229, $LVS_SHOWSELALWAYS, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT,$LVS_EX_HEADERDRAGDROP))
_GUICtrlListViewSetColumnWidth($EDITINI_LISTVIEW, 0, 200);SPALTENBREITE "Profilname" FESTLEGEN
_GUICtrlListViewSetColumnWidth($EDITINI_LISTVIEW, 1, 520);SPALTENBREITE "Profilpfad" FESTLEGEN
_GUICtrlListViewSetColumnWidth($EDITINI_LISTVIEW, 2, 59);SPALTENBREITE "Status" FESTLEGEN
$EDITINI_AddBtn = GUICtrlCreateButton("Hinzufügen", 10, 300, 80)
$EDITINI_EditBtn = GUICtrlCreateButton("Bearbeiten", 95, 300, 80)
$EDITINI_DelBtn = GUICtrlCreateButton("Löschen", 180, 300, 80)
$EDITINI_MoveUpBtn = GUICtrlCreateButton("Hoch", 265, 300, 80)
$EDITINI_MoveDownBtn = GUICtrlCreateButton("Runter", 350, 300, 80)
$EDITINI_CheckBtn = GUICtrlCreateButton("Testen", 435, 300, 80)
$EDITINI_SaveBtn = GUICtrlCreateButton("Speichern", 585, 300, 100)
GUICtrlSetState($EDITINI_SaveBtn, $GUI_DISABLE)
$EDITINI_ExitBtn = GUICtrlCreateButton("Fertig", 690, 300, 100)
GUISetState()
Dim $B_DESCENDING[_GUICtrlListViewGetSubItemsCount($EDITINI_LISTVIEW)] ;Setzt die nötigen Voraussetzungen für das Sortieren
;~ ;Auslesen der Ini-Datei in Array
$aDataIniContent = IniReadSectionNames(@ScriptDir & "\data.ini")
For $i = 1 To $aDataIniContent[0]
GUICtrlCreateListViewItem($aDataIniContent[$i] & "|" & IniRead(@ScriptDir & "\data.ini", $aDataIniContent[$i], "path", "Fehler") ,$EDITINI_LISTVIEW) ;Eventuell sollte ich doch Variable zuordnen
Next
While 1
$msg1 = GUIGetMsg()
$nLVSCountLines = _GUICtrlListViewGetSelectedCount($EDITINI_LISTVIEW) ;Wird zum Aktivieren der Buttons benötigt
Select
Case $msg1 = 0
ContinueLoop
;Schalter für Buttons, wenn kein Item gewählt
Case $nLVSBtnState <> 1 And $nLVSCountLines = 0
GUICtrlSetState($EDITINI_EditBtn, $GUI_DISABLE)
GUICtrlSetState($EDITINI_DelBtn, $GUI_DISABLE)
GUICtrlSetState($EDITINI_MoveUpBtn, $GUI_DISABLE)
GUICtrlSetState($EDITINI_MoveDownBtn, $GUI_DISABLE)
$nLVSBtnState = 1
;Schalter für Buttons, wenn ein Item gewählt
Case $nLVSBtnState <> 2 And $nLVSCountLines = 1
GUICtrlSetState($EDITINI_EditBtn, $GUI_ENABLE)
GUICtrlSetState($EDITINI_DelBtn, $GUI_ENABLE)
GUICtrlSetState($EDITINI_MoveUpBtn, $GUI_ENABLE)
GUICtrlSetState($EDITINI_MoveDownBtn, $GUI_ENABLE)
$nLVSBtnState = 2
;Schalter für Buttons, wenn mehr als ein Item gewählt
Case $nLVSBtnState <> 3 And $nLVSCountLines > 1
GUICtrlSetState($EDITINI_EditBtn, $GUI_DISABLE)
GUICtrlSetState($EDITINI_DelBtn, $GUI_ENABLE)
GUICtrlSetState($EDITINI_MoveUpBtn, $GUI_DISABLE)
GUICtrlSetState($EDITINI_MoveDownBtn, $GUI_DISABLE)
$nLVSBtnState = 3
;Sortiert die Liste, wenn auf Spalte geklickt
Case $msg1 = $EDITINI_LISTVIEW
_EditFlag(1, $EDITINI_SaveBtn)
ReDim $B_DESCENDING[_GUICtrlListViewGetSubItemsCount($EDITINI_LISTVIEW)] ;Setzt die nötigen Voraussetzungen für das Sortieren
_GUICtrlListViewSort($EDITINI_LISTVIEW, $B_DESCENDING, GUICtrlGetState($EDITINI_LISTVIEW))
;Hinzufügen
Case $msg1 = $EDITINI_AddBtn
$sAddTitle = ""
$sAddPath = ""
$nAddNEditFlag = _AddNEdit("Eintrag hinzufügen", $sAddTitle, $sAddPath)
If $nAddNEditFlag = 1 Then
_EditFlag(1, $EDITINI_SaveBtn)
_GUICtrlListViewInsertItem ($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), $sAddTitle & "|" & $sAddPath)
;Setzt die Sichtbarkeit des angefügten Items, wenn vorher in der Liste kein Ort ausgewählt
If _GUICtrlListViewGetSelectedCount($EDITINI_LISTVIEW) = 0 Then _GUICtrlListViewEnsureVisible($EDITINI_LISTVIEW, _GUICtrlListViewGetItemCount($EDITINI_LISTVIEW)-1, 1)
Else
ContinueLoop
EndIf
;Bearbeiten
Case $msg1 = $EDITINI_EditBtn
$sAddTitle = _GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0)
$sAddPath = _GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1)
$nAddNEditFlag = _AddNEdit("Eintrag bearbeiten", $sAddTitle, $sAddPath)
;Prüfung, ob Änderung
If $nAddNEditFlag = 1 Then
If $sAddTitle = _GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0) And $sAddPath = _GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1) Then
ContinueLoop
Else
_EditFlag(1, $EDITINI_SaveBtn)
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0, $sAddTitle)
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1, $sAddPath)
EndIf
Else
ContinueLoop
EndIf
;Löschen
Case $msg1 = $EDITINI_DelBtn
_EditFlag(1, $EDITINI_SaveBtn)
_GUICtrlListViewDeleteItemsSelected($EDITINI_LISTVIEW)
;Hoch
Case $msg1 = $EDITINI_MoveUpBtn
If _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW) <> -1 Then ;Wenn keine Auswahl, dann nichts tun
;Auslesen der zu verschiebenden Daten
$aItemMoveUp1 = StringSplit(_GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)), "|")
$aItemMoveUp2 = StringSplit(_GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)-1), "|")
;Tauschen der Daten in der Listview $aItemMoveUp2
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0, $aItemMoveUp2[1])
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1, $aItemMoveUp2[2])
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 2, $aItemMoveUp2[3])
;Tauschen der Daten in der Listview $aItemMoveUp1
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)-1, 0, $aItemMoveUp1[1])
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)-1, 1, $aItemMoveUp1[2])
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)-1, 2, $aItemMoveUp1[3])
;Auswahl aktualisieren
If _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW) > 0 Then ;Damit nicht über die Auswahl hinaus gearbeitet wird
_EditFlag(1, $EDITINI_SaveBtn)
_GUICtrlListViewSetItemSelState ($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)-1)
_GUICtrlListViewSetItemSelState ($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1, 0)
EndIf
_GUICtrlListViewEnsureVisible($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1)
EndIf
;Runter
Case $msg1 = $EDITINI_MoveDownBtn
If _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW) <> -1 Then ;Wenn keine Auswahl, dann nichts tun
If _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW) <= _GUICtrlListViewGetItemCount($EDITINI_LISTVIEW)-2 Then ;Damit nicht über die Auswahl hinaus gearbeitet wird
_EditFlag(1, $EDITINI_SaveBtn)
;Auslesen der zu verschiebenden Daten
$aItemMoveUp1 = StringSplit(_GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)), "|")
$aItemMoveUp2 = StringSplit(_GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1), "|")
;Tauschen der Daten in der Listview $aItemMoveUp2
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0, $aItemMoveUp2[1])
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1, $aItemMoveUp2[2])
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 2, $aItemMoveUp2[3])
;Tauschen der Daten in der Listview $aItemMoveUp1
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1, 0, $aItemMoveUp1[1])
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1, 1, $aItemMoveUp1[2])
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1, 2, $aItemMoveUp1[3])
;Auswahl aktualisieren
_GUICtrlListViewSetItemSelState ($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1)
_GUICtrlListViewSetItemSelState ($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0)
_GUICtrlListViewEnsureVisible($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1)
EndIf
EndIf
;Testen
Case $msg1 = $EDITINI_CheckBtn
For $i = 0 To _GUICtrlListViewGetItemCount($EDITINI_LISTVIEW)-1 ;-1, weil da irgendwie immer ein leeres Item mitgezählt wird
If FileExists(_GUICtrlListViewGetItemText($EDITINI_LISTVIEW, $i, 1)) Then
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, $i, 2, "OK")
Else
_GUICtrlListViewSetItemText($EDITINI_LISTVIEW, $i, 2, "ERROR")
EndIf
Next
;Speichern
Case $msg1 = $EDITINI_SaveBtn
_EditFlag(0, $EDITINI_SaveBtn)
FileDelete(@ScriptDir & "\data.ini")
For $i = 0 To _GUICtrlListViewGetItemCount($EDITINI_LISTVIEW)-1 ;-1, weil da irgendwie immer ein leeres Item mitgezählt wird
IniWriteSection(@ScriptDir & "\data.ini", _GUICtrlListViewGetItemText($EDITINI_LISTVIEW, $i, 0), "path=" & _GUICtrlListViewGetItemText($EDITINI_LISTVIEW, $i, 1))
Next
;~ programmdelete()
;~ programmcheck()
;Exit/Fertig
Case $msg1 = $EDITINI_ExitBtn Or $msg1 = $GUI_EVENT_CLOSE
If GUICtrlGetState($EDITINI_SaveBtn) = 80 Then ;Falls der Button aktiviert ist
$nExitBox = MsgBox(4+32+256,"Datenänderung ignorieren?", "Die Daten wurden geändert. Wollen Sie dennoch das " & @CRLF & "Programm verlassen, ohne die Änderungen gepeichert zu haben?")
If $nExitBox = 6 Then ;Ja
ExitLoop
Else
ContinueLoop
EndIf
Else
ExitLoop
EndIf
EndSelect
WEnd
GUIDelete($editinigui) ;Löscht die EditGUI, damit wieder nur mit dem Tray gearbeitet wird
TraySetState(1)
EndFunc
;----------------------------------------------------------------------
;FUNKTION _AddNEdit($sTitle, ByRef $sAddTitle, ByRef $sAddPath)
;Eingabemaske der Daten in der ListView
;----------------------------------------------------------------------
Func _AddNEdit($sTitle, ByRef $sAddTitle, ByRef $sAddPath)
$ADDEDIT_GUI = GUICreate($sTitle, 330, 165)
GUICtrlCreateGraphic(0, 0, 330, 30)
GUICtrlSetBkColor(-1, 0xffffff)
$label1 = GUICtrlCreateLabel("Geben Sie die erforderlichen Daten ein:", 10, 8, 320)
GUICtrlSetBkColor($label1, 0xffffff)
GUICtrlSetFont($label1, 10, 550)
$statuslabel1 = GUICtrlCreateLabel("", 0, 31, 331, 2, BitOR($SS_SIMPLE, $SS_SUNKEN))
GUICtrlCreateLabel("Programmname:", 10, 48, 80)
$sAddTitleInput = GUICtrlCreateInput($sAddTitle, 100, 45, 220)
GUICtrlCreateLabel("Programmpfad:", 10, 78, 80)
$sAddPathInput = GUICtrlCreateInput($sAddPath, 100, 75, 220)
$AddWarn = GUICtrlCreateLabel("", 50, 102, 300)
GUICtrlSetColor($AddWarn, 0xCD4F39)
GUICtrlCreateLabel("", 0, 120, 331, 2, BitOR($SS_SIMPLE, $SS_SUNKEN))
$OkBtn = GUICtrlCreateButton("OK", 10, 130, 100)
$OpenBtn = GUICtrlCreateButton("Suchen...", 115, 130, 100)
$CancelBtn = GUICtrlCreateButton("Abbrechen", 220, 130, 100)
Guisetstate()
While 1
$msgadd = GUIGetMsg()
Select
Case $msgadd = $CancelBtn Or $msgadd = $GUI_EVENT_CLOSE
$Return = 0
ExitLoop
Case $msgadd = $OkBtn
;Prüfung, ob leer
If GUICtrlRead($sAddTitleInput) = "" Or GUICtrlRead($sAddPathInput) = "" Then
GUICtrlSetData($AddWarn, "Achtung! Die Eingabefelder dürfen nicht leer sein.")
ContinueLoop
;Prüfung, ob Pfad existiert
ElseIf Not FileExists(GUICtrlRead($sAddPathInput)) Then
GUICtrlSetData($AddWarn, "Achtung! Die angegebene Datei existiert nicht.")
ContinueLoop
;Alles in Ordnung
Else
$sAddTitle = GUICtrlRead($sAddTitleInput)
$sAddPath = GUICtrlRead($sAddPathInput)
$Return = 1
ExitLoop
EndIf
Case $msgadd = $OpenBtn
$sFOD = FileOpenDialog("Ausführbare Datei suchen", Default, "Ausführbare Datei (*.exe;*.bat;*.com)", 1 + 2)
If $sFOD <> "" Then
GUICtrlSetData($sAddPathInput, $sFOD)
$aFODSplit = StringSplit($sFOD, "\")
GUICtrlSetData($sAddTitleInput, $aFODSplit[$aFODSplit[0]])
EndIf
EndSelect
WEnd
GUIDelete($ADDEDIT_GUI)
Return $Return
EndFunc
;----------------------------------------------------------------------
;FUNKTION _EditFlag
;Setzt die Flag und den Status des Speichern-Buttons
;----------------------------------------------------------------------
Func _EditFlag($nFlag, $Btn)
If $nFlag = 1 Then
GUICtrlSetState($Btn, $GUI_ENABLE)
ElseIf $nFlag = 0 Then
GUICtrlSetState($Btn, $GUI_DISABLE)
EndIf
EndFunc
Hier das neue, so weit ich es habe:
Spoiler anzeigen
#Include <Constants.au3>
#include <GUIConstants.au3>
#include <file.au3>
#Include <Misc.au3>
#include <Array.au3>
#include <GuiListView.au3>
Dim $aAdmins[1] ;Array der auszulesenden Administrator-Profile
Dim $programmmax
Dim $profil_array
Dim $edit
Dim $aboutitem
Dim $exititem
Dim $item1
Dim $item2
Dim $item3
Dim $optiondropbox
Dim $optionmenu
Dim $optiontraytip
Dim $optionautostart
Dim $optionpasswd
Dim $optionpathcheck
Dim $traytipflag
Dim $passwdsaveflag = 0
Dim $passwd
Dim $exitflag = 0
Dim $helpitem
Dim $flagoptionsstartup
_EditIni()
;----------------------------------------------------------------------
;FUNKTION _EditIni
;Erstellt eine GUI zum Bearbeiten der data.ini
;----------------------------------------------------------------------
Func _EditIni()
$nLVSBtnState = 0 ;Wird zum Aktivieren der Buttons benötigt
TraySetState(2)
;GUI für die EditControl wird erzeugt, hierin findet die Bearbeitung der Ini-Datei statt
$editinigui = GUICreate("AdminRun", 800, 335)
GUICtrlCreateGraphic(0, 0, 800, 60)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlCreatePic(@ScriptDir & "\img\addon.bmp", 15, 20, 16, 16)
$label1 = GUICtrlCreateLabel("Menüeinträge bearbeiten", 45, 15, 300)
GUICtrlSetBkColor($label1, 0xffffff)
GUICtrlSetFont($label1, 9, 600)
$label2 = GUICtrlCreateLabel("Fügen Sie neue Einträge hinzu oder löschen Sie Einträge", 45, 30, 300)
GUICtrlSetBkColor($label2, 0xffffff)
GUICtrlSetFont($label2, 8, 400, 2)
$statuslabel1 = GUICtrlCreateLabel("", 0, 61, 801, 2, BitOR($SS_SIMPLE, $SS_SUNKEN))
$EDITINI_LISTVIEW = GUICtrlCreateListView("Programmname|Programmpfad|Status", 0, 62, 800, 229, $LVS_SHOWSELALWAYS, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT,$LVS_EX_HEADERDRAGDROP))
_GUICtrlListView_SetColumnWidth($EDITINI_LISTVIEW, 0, 200);SPALTENBREITE "Profilname" FESTLEGEN
_GUICtrlListView_SetColumnWidth($EDITINI_LISTVIEW, 1, 520);SPALTENBREITE "Profilpfad" FESTLEGEN
_GUICtrlListView_SetColumnWidth($EDITINI_LISTVIEW, 2, 59);SPALTENBREITE "Status" FESTLEGEN
$EDITINI_AddBtn = GUICtrlCreateButton("Hinzufügen", 10, 300, 80)
$EDITINI_EditBtn = GUICtrlCreateButton("Bearbeiten", 95, 300, 80)
$EDITINI_DelBtn = GUICtrlCreateButton("Löschen", 180, 300, 80)
$EDITINI_MoveUpBtn = GUICtrlCreateButton("Hoch", 265, 300, 80)
$EDITINI_MoveDownBtn = GUICtrlCreateButton("Runter", 350, 300, 80)
$EDITINI_CheckBtn = GUICtrlCreateButton("Testen", 435, 300, 80)
$EDITINI_SaveBtn = GUICtrlCreateButton("Speichern", 585, 300, 100)
GUICtrlSetState($EDITINI_SaveBtn, $GUI_DISABLE)
$EDITINI_ExitBtn = GUICtrlCreateButton("Fertig", 690, 300, 100)
GUISetState()
;~ Dim $B_DESCENDING[_GUICtrlListViewGetSubItemsCount($EDITINI_LISTVIEW)] ;Setzt die nötigen Voraussetzungen für das Sortieren
;~ ;Auslesen der Ini-Datei in Array
$aDataIniContent = IniReadSectionNames(@ScriptDir & "\data.ini")
For $i = 1 To $aDataIniContent[0]
GUICtrlCreateListViewItem($aDataIniContent[$i] & "|" & IniRead(@ScriptDir & "\data.ini", $aDataIniContent[$i], "path", "Fehler") ,$EDITINI_LISTVIEW) ;Eventuell sollte ich doch Variable zuordnen
Next
While 1
$msg1 = GUIGetMsg()
$nLVSCountLines = _GUICtrlListView_GetSelectedCount($EDITINI_LISTVIEW) ;Wird zum Aktivieren der Buttons benötigt
Select
Case $msg1 = 0
ContinueLoop
;Schalter für Buttons, wenn kein Item gewählt
Case $nLVSBtnState <> 1 And $nLVSCountLines = 0
GUICtrlSetState($EDITINI_EditBtn, $GUI_DISABLE)
GUICtrlSetState($EDITINI_DelBtn, $GUI_DISABLE)
GUICtrlSetState($EDITINI_MoveUpBtn, $GUI_DISABLE)
GUICtrlSetState($EDITINI_MoveDownBtn, $GUI_DISABLE)
$nLVSBtnState = 1
;Schalter für Buttons, wenn ein Item gewählt
Case $nLVSBtnState <> 2 And $nLVSCountLines = 1
GUICtrlSetState($EDITINI_EditBtn, $GUI_ENABLE)
GUICtrlSetState($EDITINI_DelBtn, $GUI_ENABLE)
GUICtrlSetState($EDITINI_MoveUpBtn, $GUI_ENABLE)
GUICtrlSetState($EDITINI_MoveDownBtn, $GUI_ENABLE)
$nLVSBtnState = 2
;Schalter für Buttons, wenn mehr als ein Item gewählt
Case $nLVSBtnState <> 3 And $nLVSCountLines > 1
GUICtrlSetState($EDITINI_EditBtn, $GUI_DISABLE)
GUICtrlSetState($EDITINI_DelBtn, $GUI_ENABLE)
GUICtrlSetState($EDITINI_MoveUpBtn, $GUI_DISABLE)
GUICtrlSetState($EDITINI_MoveDownBtn, $GUI_DISABLE)
$nLVSBtnState = 3
;Sortiert die Liste, wenn auf Spalte geklickt
Case $msg1 = $EDITINI_LISTVIEW
;~ _EditFlag(1, $EDITINI_SaveBtn)
;~ ReDim $B_DESCENDING[_GUICtrlListViewGetSubItemsCount($EDITINI_LISTVIEW)] ;Setzt die nötigen Voraussetzungen für das Sortieren
;~ _GUICtrlListViewSort($EDITINI_LISTVIEW, $B_DESCENDING, GUICtrlGetState($EDITINI_LISTVIEW))
;Hinzufügen
Case $msg1 = $EDITINI_AddBtn
$sAddTitle = ""
$sAddPath = ""
$nAddNEditFlag = _AddNEdit("Eintrag hinzufügen", $sAddTitle, $sAddPath)
If $nAddNEditFlag = 1 Then
_EditFlag(1, $EDITINI_SaveBtn)
_GUICtrlListView_InsertItem($EDITINI_LISTVIEW, $sAddTitle, _GUICtrlListView_GetSelectionMark(GUICtrlGetHandle($EDITINI_LISTVIEW)))
_GUICtrlListView_SetSelectionMark(GUICtrlGetHandle($EDITINI_LISTVIEW), _GUICtrlListView_GetSelectionMark(GUICtrlGetHandle($EDITINI_LISTVIEW))-1)
_GUICtrlListView_SetItemText($EDITINI_LISTVIEW, _GUICtrlListView_GetSelectionMark(GUICtrlGetHandle($EDITINI_LISTVIEW)),$sAddPath, 1)
;Setzt die Sichtbarkeit des angefügten Items, wenn vorher in der Liste kein Ort ausgewählt
;~ If _GUICtrlListView_GetSelectedCount($EDITINI_LISTVIEW) = 0 Then _GUICtrlListView_EnsureVisible($EDITINI_LISTVIEW, _GUICtrlListView_GetSelectionMark(GUICtrlGetHandle($EDITINI_LISTVIEW))-1, 1)
Else
ContinueLoop
EndIf
;Bearbeiten
Case $msg1 = $EDITINI_EditBtn
;~ $sAddTitle = _GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0)
;~ $sAddPath = _GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1)
;~ $nAddNEditFlag = _AddNEdit("Eintrag bearbeiten", $sAddTitle, $sAddPath)
;~ ;Prüfung, ob Änderung
;~ If $nAddNEditFlag = 1 Then
;~ If $sAddTitle = _GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0) And $sAddPath = _GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1) Then
;~ ContinueLoop
;~ Else
;~ _EditFlag(1, $EDITINI_SaveBtn)
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0, $sAddTitle)
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1, $sAddPath)
;~ EndIf
;~ Else
;~ ContinueLoop
;~ EndIf
;Löschen
Case $msg1 = $EDITINI_DelBtn
_EditFlag(1, $EDITINI_SaveBtn)
_GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($EDITINI_LISTVIEW))
;Hoch
Case $msg1 = $EDITINI_MoveUpBtn
;~ If _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW) <> -1 Then ;Wenn keine Auswahl, dann nichts tun
;~ ;Auslesen der zu verschiebenden Daten
;~ $aItemMoveUp1 = StringSplit(_GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)), "|")
;~ $aItemMoveUp2 = StringSplit(_GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)-1), "|")
;~ ;Tauschen der Daten in der Listview $aItemMoveUp2
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0, $aItemMoveUp2[1])
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1, $aItemMoveUp2[2])
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 2, $aItemMoveUp2[3])
;~ ;Tauschen der Daten in der Listview $aItemMoveUp1
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)-1, 0, $aItemMoveUp1[1])
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)-1, 1, $aItemMoveUp1[2])
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)-1, 2, $aItemMoveUp1[3])
;~ ;Auswahl aktualisieren
;~ If _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW) > 0 Then ;Damit nicht über die Auswahl hinaus gearbeitet wird
;~ _EditFlag(1, $EDITINI_SaveBtn)
;~ _GUICtrlListViewSetItemSelState ($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)-1)
;~ _GUICtrlListViewSetItemSelState ($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1, 0)
;~ EndIf
;~ _GUICtrlListViewEnsureVisible($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1)
;~ EndIf
;Runter
Case $msg1 = $EDITINI_MoveDownBtn
;~ If _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW) <> -1 Then ;Wenn keine Auswahl, dann nichts tun
;~ If _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW) <= _GUICtrlListViewGetItemCount($EDITINI_LISTVIEW)-2 Then ;Damit nicht über die Auswahl hinaus gearbeitet wird
;~ _EditFlag(1, $EDITINI_SaveBtn)
;~ ;Auslesen der zu verschiebenden Daten
;~ $aItemMoveUp1 = StringSplit(_GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)), "|")
;~ $aItemMoveUp2 = StringSplit(_GUICtrlListViewGetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1), "|")
;~ ;Tauschen der Daten in der Listview $aItemMoveUp2
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0, $aItemMoveUp2[1])
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1, $aItemMoveUp2[2])
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 2, $aItemMoveUp2[3])
;~ ;Tauschen der Daten in der Listview $aItemMoveUp1
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1, 0, $aItemMoveUp1[1])
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1, 1, $aItemMoveUp1[2])
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1, 2, $aItemMoveUp1[3])
;~ ;Auswahl aktualisieren
;~ _GUICtrlListViewSetItemSelState ($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW)+1)
;~ _GUICtrlListViewSetItemSelState ($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 0)
;~ _GUICtrlListViewEnsureVisible($EDITINI_LISTVIEW, _GUICtrlListViewGetCurSel($EDITINI_LISTVIEW), 1)
;~ EndIf
;~ EndIf
;Testen
Case $msg1 = $EDITINI_CheckBtn
;~ For $i = 0 To _GUICtrlListViewGetItemCount($EDITINI_LISTVIEW)-1 ;-1, weil da irgendwie immer ein leeres Item mitgezählt wird
;~ If FileExists(_GUICtrlListViewGetItemText($EDITINI_LISTVIEW, $i, 1)) Then
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, $i, 2, "OK")
;~ Else
;~ _GUICtrlListViewSetItemText($EDITINI_LISTVIEW, $i, 2, "ERROR")
;~ EndIf
;~ Next
;Speichern
Case $msg1 = $EDITINI_SaveBtn
_EditFlag(0, $EDITINI_SaveBtn)
FileDelete(@ScriptDir & "\data.ini")
For $i = 0 To _GUICtrlListView_GetItemCount($EDITINI_LISTVIEW)-1 ;-1, weil da irgendwie immer ein leeres Item mitgezählt wird
IniWriteSection(@ScriptDir & "\data.ini", _GUICtrlListView_GetItemText($EDITINI_LISTVIEW, $i, 0), "path=" & _GUICtrlListView_GetItemText($EDITINI_LISTVIEW, $i, 1))
Next
;~ programmdelete()
;~ programmcheck()
;Exit/Fertig
Case $msg1 = $EDITINI_ExitBtn Or $msg1 = $GUI_EVENT_CLOSE
If GUICtrlGetState($EDITINI_SaveBtn) = 80 Then ;Falls der Button aktiviert ist
$nExitBox = MsgBox(4+32+256,"Datenänderung ignorieren?", "Die Daten wurden geändert. Wollen Sie dennoch das " & @CRLF & "Programm verlassen, ohne die Änderungen gepeichert zu haben?")
If $nExitBox = 6 Then ;Ja
ExitLoop
Else
ContinueLoop
EndIf
Else
ExitLoop
EndIf
EndSelect
WEnd
GUIDelete($editinigui) ;Löscht die EditGUI, damit wieder nur mit dem Tray gearbeitet wird
TraySetState(1)
EndFunc
;----------------------------------------------------------------------
;FUNKTION _AddNEdit($sTitle, ByRef $sAddTitle, ByRef $sAddPath)
;Eingabemaske der Daten in der ListView
;----------------------------------------------------------------------
Func _AddNEdit($sTitle, ByRef $sAddTitle, ByRef $sAddPath)
$ADDEDIT_GUI = GUICreate($sTitle, 330, 165)
GUICtrlCreateGraphic(0, 0, 330, 30)
GUICtrlSetBkColor(-1, 0xffffff)
$label1 = GUICtrlCreateLabel("Geben Sie die erforderlichen Daten ein:", 10, 8, 320)
GUICtrlSetBkColor($label1, 0xffffff)
GUICtrlSetFont($label1, 10, 550)
$statuslabel1 = GUICtrlCreateLabel("", 0, 31, 331, 2, BitOR($SS_SIMPLE, $SS_SUNKEN))
GUICtrlCreateLabel("Programmname:", 10, 48, 80)
$sAddTitleInput = GUICtrlCreateInput($sAddTitle, 100, 45, 220)
GUICtrlCreateLabel("Programmpfad:", 10, 78, 80)
$sAddPathInput = GUICtrlCreateInput($sAddPath, 100, 75, 220)
$AddWarn = GUICtrlCreateLabel("", 50, 102, 300)
GUICtrlSetColor($AddWarn, 0xCD4F39)
GUICtrlCreateLabel("", 0, 120, 331, 2, BitOR($SS_SIMPLE, $SS_SUNKEN))
$OkBtn = GUICtrlCreateButton("OK", 10, 130, 100)
$OpenBtn = GUICtrlCreateButton("Suchen...", 115, 130, 100)
$CancelBtn = GUICtrlCreateButton("Abbrechen", 220, 130, 100)
Guisetstate()
While 1
$msgadd = GUIGetMsg()
Select
Case $msgadd = $CancelBtn Or $msgadd = $GUI_EVENT_CLOSE
$Return = 0
ExitLoop
Case $msgadd = $OkBtn
;Prüfung, ob leer
If GUICtrlRead($sAddTitleInput) = "" Or GUICtrlRead($sAddPathInput) = "" Then
GUICtrlSetData($AddWarn, "Achtung! Die Eingabefelder dürfen nicht leer sein.")
ContinueLoop
;Prüfung, ob Pfad existiert
ElseIf Not FileExists(GUICtrlRead($sAddPathInput)) Then
GUICtrlSetData($AddWarn, "Achtung! Die angegebene Datei existiert nicht.")
ContinueLoop
;Alles in Ordnung
Else
$sAddTitle = GUICtrlRead($sAddTitleInput)
$sAddPath = GUICtrlRead($sAddPathInput)
$Return = 1
ExitLoop
EndIf
Case $msgadd = $OpenBtn
$sFOD = FileOpenDialog("Ausführbare Datei suchen", Default, "Ausführbare Datei (*.exe;*.bat;*.com)", 1 + 2)
If $sFOD <> "" Then
GUICtrlSetData($sAddPathInput, $sFOD)
$aFODSplit = StringSplit($sFOD, "\")
GUICtrlSetData($sAddTitleInput, $aFODSplit[$aFODSplit[0]])
EndIf
EndSelect
WEnd
GUIDelete($ADDEDIT_GUI)
Return $Return
EndFunc
;----------------------------------------------------------------------
;FUNKTION _EditFlag
;Setzt die Flag und den Status des Speichern-Buttons
;----------------------------------------------------------------------
Func _EditFlag($nFlag, $Btn)
If $nFlag = 1 Then
GUICtrlSetState($Btn, $GUI_ENABLE)
ElseIf $nFlag = 0 Then
GUICtrlSetState($Btn, $GUI_DISABLE)
EndIf
EndFunc
Im Anhang findet ihr die ini, die ich benutze.
Eines der Probleme ist, dass ich, wenn ein Eintrag hinzugefügt wurde und diesen auswähle, Buttons ausgelöst werden. Ich verstehe nicht einmal im Ansatz, was die Buttons mit der ListView zu tun haben sollten. Zum Beispiel wird "automatisch" gespeichert.
Außerdem verstehe ich nicht, wozu ich noch GuiCtrlCreateListView brauche, wenn es _GuiCtrlListView_Create gibt?
Vielen Dank für die Hilfe!