Progressbar funktioniert nicht

  • Spoiler anzeigen
    [autoit]


    $progress=GUICtrlCreateProgress(160,162,80,20,$PBS_SMOOTH)
    $progress_0=GUICtrlsetData($progress,0)
    For $h = 1 To UBound($id) - 1
    GUICtrlRead($progress)
    ;INI schreiben
    IniWrite(@ScriptDir&"\Programme\settings.ini","Programme",$programme[$h],GUICtrlRead($id[$h]))
    If GUICtrlRead($id[$h]) = $GUI_CHECKED Then
    ;Externes Script ausführen
    ShellExecuteWait('"' & @ScriptDir & '\Programme\autoit.exe"', '"' & @ScriptDir & '\Programme\' & $programme[$h] & '\install.au3"')
    EndIf
    $fortschritt=$h/Ubound($id)
    GUICtrlSetData($progress,$fortschritt)

    [/autoit]

    Was ist daran falsch? Ubound($id) ist nicht 100...

    Einmal editiert, zuletzt von Taek (28. Juli 2008 um 23:40)

  • Das SetData muss mit in die If-Schleife, aber da in der Schleife erst gecheckt wird, ob ein Haken in der Checkbox ist, weiß ich nicht, wie ich die "Kästchen mit Haken" als 100% definieren soll.

    Spoiler anzeigen
    [autoit]

    For $h = 1 To UBound($id) - 1
    ;INI schreiben
    IniWrite(@ScriptDir&"\Programme\settings.ini","Programme",$programme[$h],GUICtrlRead($id[$h]))
    If GUICtrlRead($id[$h]) = $GUI_CHECKED Then
    ;Externes Script ausführen
    ShellExecuteWait('"' & @ScriptDir & '\Programme\autoit.exe"', '"' & @ScriptDir & '\Programme\' & $programme[$h] & '\install.au3"')
    $p = $p + (100/(Ubound($id)-1))
    GUICtrlSetData($progress, $p)
    Else
    $p = $p + (100/(Ubound($id)-1))
    GUICtrlSetData($progress, $p)
    EndIf
    Next
    GUICtrlSetData($progress,100)

    [/autoit]

    Das wäre so eine Zwischenlösung. Das blöde ist nur, wenn ich die ersten 3 Checkboxen ohne Haken habe, beginnt er mir (momentan) schon bei 50% :D

    Einmal editiert, zuletzt von Taek (28. Juli 2008 um 10:48)

  • Versuch doch mal das:

    Spoiler anzeigen
    [autoit]

    $progress_step=0
    For $h = 1 To UBound($id) - 1
    If BitAND(GUICtrlRead($id[$h]),$GUI_CHECKED) = $GUI_CHECKED Then $progress_step +=1
    Next
    If $progress_step Then
    $progress_step = Ceiling(100/$progress_step)
    Else
    $progress_step = 100
    EndIf
    ...

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

    $p += $progress_step
    GUICtrlSetData($progress, $p)

    [/autoit]
    • Offizieller Beitrag

    @Taek: Ich würde das so lösen:

    [autoit]


    Global $idCheck[UBound($id)-1]
    $idCheck[0] = 0
    For $i = 1 To UBound($id) - 1
    $idCheck[$i] = BitAND(GUICtrlRead($id[$h]), $GUI_CHECKED) = $GUI_CHECKED
    $idCheck[0] += $idCheck[$i]
    Next
    $p = 0
    For $i = 1 To UBound($id) - 1
    ;INI schreiben
    IniWrite(@ScriptDir & "\Programme\settings.ini", "Programme", $programme[$i], $idCheck[$i])
    If $idCheck[$i] Then
    ;Externes Script ausführen
    ShellExecuteWait('"' & @ScriptDir & '\Programme\autoit.exe"', '"' & @ScriptDir & '\Programme\' & $programme[$i] & '\install.au3"')
    $p += 1
    GUICtrlSetData($progress, 100 / $idCheck[0] * $p)
    EndIf
    Next
    GUICtrlSetData($progress, 100)

    [/autoit]
  • @S-e-v-e-n: Ich möchte den Fortschritt der installierten Programme darstellen.

    Oscar : Ich kann das Script momentan nicht testen, da ich nicht in der Arbeit bin. Aber so ungefähr dürfte das schon stimmen, ich mache den ersten Check durchlauf wahrscheinlich in der (hier) 2. For-Schleife. Es stört ja theoretisch nicht, ich dann 2 If-Schleifen drin hab.

    Danke für die Mithilfe.