Hallo Leute, ich versuche jetzt schon den ganzen Vormittag dieses Problem zu lösen, aber es will einfach nicht funktionieren. Ich programmiere gerade ein kleines Programm, das aus einer XML Datei verschiedene Programm ausliest und in einer ListView darstellt. Dann kann der Benuter die Programm anwählen, welche er installieren möchte. Anschl. werden alle angewählten Programme nacheinander installiert. Mein Problem ist im Moment das Auslesen der Checkboxen, da diese ja dynamisch erzeugt werden. Ich hoffe ihr könnt mir da weiterhelfen:
Hier der Code
Spoiler anzeigen
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include "_XMLDomWrapper.au3"
Dim $sXMLFile="files.xml"
Dim $aproducer[1]
Dim $aproduct[1]
Dim $adescription[1]
Dim $aurl[1]
; Read all files from the files.xml
$result = _XMLFileOpen($sXMLFile)
If $result = 0 Then Exit
$sRet = _XMLSelectNodes("//item")
; Add all values into arrays
For $k = 1 to $sRet[0]
AddArrayItem($aproducer,_GetFirstValue("//item[" & $k & "]/producer"))
AddArrayItem($aproduct,_GetFirstValue("//item[" & $k & "]/product"))
AddArrayItem($adescription,_GetFirstValue("//item[" & $k & "]/description"))
AddArrayItem($aurl,_GetFirstValue("//item[" & $k & "]/url"))
Next
; Create the gui
$main_GUI = GUICreate("Program Install Manager",500,400) ; will create a dialog box that when displayed is centered
;Menu
Dim $menufile = GUICtrlCreateMenu ("File")
Dim $itemexit = GUICtrlCreateMenuitem ("Exit",$menufile)
Dim $menuhelp = GUICtrlCreateMenu ("Help")
Dim $itemabout = GUICtrlCreateMenuitem ("About",$menuhelp)
; InfoLabel
GUICtrlCreateLabel("Here you can simple install a various of programs.", 5, 10)
; Statistic Label
GUICtrlCreateLabel("Count: " & $sRet[0] & " Items",450 , 10)
; Create ListView
$listview = GUICtrlCreateListView("", 5, 40, 490, 300, -1, BitOR($LVS_SORTASCENDING,$LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES, $LVS_EX_REGIONAL))
_GUICtrlListView_AddColumn($listview, " ", 30)
_GUICtrlListView_AddColumn($listview, "Producer", 80)
_GUICtrlListView_AddColumn($listview, "Product", 100)
_GUICtrlListView_AddColumn($listview, "Description", 230)
; Array Size
Dim $Checks[$sRet[0]]
; Add Items to ListView
for $x = 0 to $sRet[0]-1
$Checks[$x] = GUICtrlCreateListViewItem( "|" & $aproducer[$x] & "|" & $aproduct[$x] & "|" & $adescription[$x], $listview)
ConsoleWrite("Object:" & $Checks[$x] & @CRLF)
Next
; new line
ConsoleWrite(@CRLF)
; Show the install button
Dim $btn_install = GUICtrlCreateButton("Install", 200, 350, 100)
GUISetState ()
;Copyright text
$copyright = "Version 1.0"
; Run the GUI until the dialog is closed
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $itemexit
ExitLoop
Case $msg = $itemabout
Msgbox(0,"About", $copyright)
Case $msg = $btn_install
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite("btn_install is pressed" & @CRLF)
;Msgbox(4,"Install", "Do you want to install this programs?")
for $x = 0 to $sRet[0]-1
ConsoleWrite("Array Count:" & $x & @CRLF)
ConsoleWrite("Object:" & $Checks[$x] & @CRLF)
If _IsChecked($Checks[$x]) Then
ConsoleWrite("Checked: true" & @CRLF)
; do something Run or ??
Else
ConsoleWrite("Checked: false" & @CRLF)
EndIf
Next
EndSelect
[/autoit] [autoit][/autoit] [autoit]Wend
Func _IsChecked($control)
Return BitAnd(GUICtrlRead($control),$GUI_CHECKED) = $GUI_CHECKED
EndFunc
; Add dynamic a array item
Func AddArrayItem(ByRef $array,$newData)
If $newData <> '' Then ; prüfen ob nicht leer
[/autoit] [autoit][/autoit] [autoit]; der erste Eintrag soll in das bestehende 1. Array-Element eingetragen werden, z.Zt. das letzte
; für weiter Einträge muß das Array vorher um ein Element vergrößert werden
If $array[Ubound($array)-1] <> '' Then ; ist das letzte Element NICHT leer (dann ist es NICHT das erste)
ReDim $array[Ubound($array)+1] ; Arraygröße neu: 1 größer als aktuelle Größe Ubound($array)
EndIf
$array[Ubound($array)-1] = $newData ; Daten in das letzte Element schreiben, im ersten Durchlauf ist dies das erste.
EndIf
EndFunc
[/autoit] [autoit][/autoit] [autoit];Get the first real value returned from the _XMLGetValue() return array.
Func _GetFirstValue($node)
$ret_val = _XMLGetValue($node)
If IsArray($ret_val) Then
Return ($ret_val[1])
Else
Return SetError(1,3,0)
EndIf
EndFunc
Edit BugFix: Bitte [ autoit ] statt [ code ] verwenden UND Spoiler! (habs geändert)