Checkbox (array) Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Checkbox (array) Problem

    Hallo,

    ...kurze Info:
    Auf meiner Form sind einige Checkboxen und dazugehörige Progressbars!
    Ich möchte nun die Checkboxen abfragen
    und wenn diese gesetzt sind, die jeweilieg Progressbar starten.

    Beispiel:
    chk 1 und chk3 sind wahr

    Dann sollte die Progressbar von chk1 starten
    wenn diese dann fertig ist, dann sollte die Progressbar v. chk3 starten

    Das Abfragen bereitet mir Probleme

    Mein Code:

    AutoIt

    1. #include <ButtonConstants.au3>
    2. #include <GUIConstantsEx.au3>
    3. #include <ProgressConstants.au3>
    4. #include <WindowsConstants.au3>
    5. #include <Array.au3>
    6. Dim $arControl[5]
    7. Dim $arControlProg[5]
    8. $Form1 = GUICreate("Form1", 615, 440, 391, 202)
    9. $arControl[1] = GUICtrlCreateCheckbox("Checkbox1", 64, 64, 97, 17)
    10. $arControl[2] = GUICtrlCreateCheckbox("Checkbox2", 64, 100, 97, 17)
    11. $arControl[3] = GUICtrlCreateCheckbox("Checkbox3", 64, 136, 97, 17)
    12. $arControl[4] = GUICtrlCreateCheckbox("Checkbox4", 64, 168, 97, 17)
    13. $arControlProg[1] = GUICtrlCreateProgress(164, 64, 150, 17)
    14. $arControlProg[2] = GUICtrlCreateProgress(164, 100, 150, 17)
    15. $arControlProg[3] = GUICtrlCreateProgress(164, 136, 150, 17)
    16. $arControlProg[4] = GUICtrlCreateProgress(164, 168, 150, 17)
    17. $Go = GUICtrlCreateButton("Start", 448, 164, 75, 25)
    18. GUISetState(@SW_SHOW)
    19. While 1
    20. $nMsg = GUIGetMsg()
    21. Switch $nMsg
    22. Case $GUI_EVENT_CLOSE
    23. Exit
    24. Case $Go
    25. For $i = 0 To UBound($arControl) - 1
    26. ;if GUICtrlgetState($arControl[$i], $gui_checked) then
    27. ;MsgBox(0,"an","ok")
    28. ;endif
    29. next
    30. EndSwitch
    31. WEnd
    Alles anzeigen



    komm da einfach nicht weiter....


    ;) Grüße Ilse
  • Spoiler anzeigen

    AutoIt

    1. #include <ButtonConstants.au3>
    2. #include <GUIConstantsEx.au3>
    3. #include <ProgressConstants.au3>
    4. #include <WindowsConstants.au3>
    5. #include <Array.au3>
    6. Dim $arControl[5]
    7. Dim $arControlProg[5]
    8. $Form1 = GUICreate("Form1", 615, 440, 391, 202)
    9. $arControl[1] = GUICtrlCreateCheckbox("Checkbox1", 64, 64, 97, 17)
    10. $arControl[2] = GUICtrlCreateCheckbox("Checkbox2", 64, 100, 97, 17)
    11. $arControl[3] = GUICtrlCreateCheckbox("Checkbox3", 64, 136, 97, 17)
    12. $arControl[4] = GUICtrlCreateCheckbox("Checkbox4", 64, 168, 97, 17)
    13. $arControlProg[1] = GUICtrlCreateProgress(164, 64, 150, 17)
    14. $arControlProg[2] = GUICtrlCreateProgress(164, 100, 150, 17)
    15. $arControlProg[3] = GUICtrlCreateProgress(164, 136, 150, 17)
    16. $arControlProg[4] = GUICtrlCreateProgress(164, 168, 150, 17)
    17. $Go = GUICtrlCreateButton("Start", 448, 164, 75, 25)
    18. GUISetState(@SW_SHOW)
    19. While 1
    20. $nMsg = GUIGetMsg()
    21. Switch $nMsg
    22. Case $GUI_EVENT_CLOSE
    23. Exit
    24. Case $Go
    25. For $i = 0 To UBound($arControl) - 1
    26. If GUICtrlRead($arControl[$i]) = 1 Then
    27. GUICtrlSetData($arControlProg[$i], 100)
    28. Else
    29. GUICtrlSetData($arControlProg[$i], 0)
    30. EndIf
    31. Next
    32. EndSwitch
    33. WEnd
    Alles anzeigen
    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!
    "

    by Phillip Torrone


    Shoutbox schrieb:

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:




    Neon Snake
  • Hallo BadBunny,

    merci für die Hilfe.
    In deinem Code läuft die Anzeige zusammen los.

    Es war folgerdermaßen gedacht:

    1 Startet....fertig, erst dann.... 3 startet beendet!
    Also die Progressbar sollte nacheinander langsam starten.

    kann man die Geschwindigkeit der Progressbar beinflussen?
    Sollte viel langsamer laufen.

    Liebe Grüße
    Ilse ;)
  • AutoIt

    1. ;i so sind keine Include nötig! ;)
    2. Dim $arControl[5]
    3. Dim $arControlProg[5]
    4. GUICreate("Form1", 615, 440, 391, 202)
    5. For $i = 0 To 4 ;i erstellt 0 bis 4 = 5 Checkbox
    6. $arControl[$i] = GUICtrlCreateCheckbox("Checkbox" & $i, 64, 64+$i*36, 97, 17)
    7. $arControlProg[$i] = GUICtrlCreateProgress(164, 64+$i*36, 150, 17)
    8. Next
    9. $Go = GUICtrlCreateButton("Start", 448, 164, 75, 25)
    10. GUISetState(@SW_SHOW)
    11. While 1
    12. Switch GUIGetMsg()
    13. Case -3
    14. Exit
    15. Case $Go
    16. For $i = 0 To UBound($arControl) - 1
    17. If GUICtrlRead($arControl[$i]) = 1 Then
    18. GUICtrlSetData($arControlProg[$i], 100)
    19. Else
    20. GUICtrlSetData($arControlProg[$i], 0)
    21. EndIf
    22. Next
    23. EndSwitch
    24. WEnd
    25. ; Ende
    Alles anzeigen
  • ...
    habe Sleep eingebaut!
    Kommt jetzt nacheinander,
    aber immer noch zu schnell

    AutoIt

    1. ;i so sind keine Include nötig! ;)
    2. Dim $arControl[5]
    3. Dim $arControlProg[5]
    4. GUICreate("Form1", 615, 440, 391, 202)
    5. For $i = 0 To 4 ;i erstellt 0 bis 4 = 5 Checkbox
    6. $arControl[$i] = GUICtrlCreateCheckbox("Checkbox" & $i, 64, 64+$i*36, 97, 17)
    7. $arControlProg[$i] = GUICtrlCreateProgress(164, 64+$i*36, 150, 17)
    8. Next
    9. $Go = GUICtrlCreateButton("Start", 448, 164, 75, 25)
    10. GUISetState(@SW_SHOW)
    11. While 1
    12. Switch GUIGetMsg()
    13. Case -3
    14. Exit
    15. Case $Go
    16. For $i = 0 To UBound($arControl) - 1
    17. If GUICtrlRead($arControl[$i]) = 1 Then
    18. GUICtrlSetData($arControlProg[$i], 100)
    19. Else
    20. GUICtrlSetData($arControlProg[$i], 0)
    21. EndIf
    22. Sleep(2000)
    23. Next
    24. EndSwitch
    25. WEnd
    26. ; Ende
    Alles anzeigen
  • Versteh dein anliegen nicht so recht. Normalerweise ändert man den Wert einer Porgressbar doch nur in Verbindung mit einer Funktion, die dann automatisch auch die Fortschrittsgeschwindigkeit bestimmt, denn die Progressbar soll doch den Fortschritt anzeigen von der Sache die da gemacht wird. Wenn du garnix machst welchen Sinn hat dann eine Verlaufsanzeige?

    Gehen wir mal davon aus, dass du hier für jede Datei mit der du etwas anstellen willst eine Checkbox und eine Progressbar hast. Der Benutzer wählt nun durch die Checkbox aus welche der Dateien er bearbeiten möchte, an der Progressbar ändert sich zunächst nichts. Sobald er seine Auswahl getroffen hat klickt er einen Strat Button. Ab hier liest dein Programm dann die ganzen Checkboxen aus um zu wissen welche Dateien der Benutzer gewählt hat:

    AutoIt

    1. for $i = 0 to ubound($checkarray) -1
    2. If BitAnd(GUICtrlRead($checkarray[$i]),$GUI_CHECKED) = $GUI_CHECKED Then ; ja die checkbox ist markiert...
    3. meinefunktion($i) ; ruft meine Funktion auf die die aktuelle Datei nun bearbeitet...
    4. endif
    5. next
    6. func meinefunktion($index)
    7. ; so hier machste dein Ding mit der Datei, gleichzeitig änderst du die Progressbar, sofern es deine Funktion erlaubt hier einen sinnvollen Verlauf anzuzeigen, sofern es nur darum geht zu zeigen, dass die Datei bearbeitet wurde setzt du sie einfach von 0 auf 100
    8. ; copy(...) ; Beispielhafte aktion
    9. ; zur Demonstration ein Dreistufiger verlauf
    10. sleep(333)
    11. guictrlsetdata($progarr[$index], 33)
    12. sleep(333)
    13. guictrlsetdata($progarr[$index], 66)
    14. sleep(333)
    15. guictrlsetdata($progarr[$index], 100)
    16. endfunc
    Alles anzeigen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von misterspeed ()

  • Hallo Misterspeed,

    hab das schon verstanden.
    Was mir unklar ist, ist ganz einfach der Zeitliche Ablauf der Progressbar.


    Beispiel:

    Checkbox 1 ist an: (langsame Progressbar)
    hier wird umfangreicher Code abgearbeitet z.B. Dauer 15 Sekunden
    d.h. die Progressbar soll ganz langsam laufen, bis der Code am Ende ist!

    Checkbox 2 ist an: (schnelleProgressbar)
    hier wird kurzer Code abgearbeitet z.B. Dauer 3 Sekunden
    d.h. die Progressbar soll schneller laufen, bis der Code am Ende ist!

    Muß ich dann für jeden Codeablauf eine eigene Progressbar einbauen?
    Am Anfang 10% und am Ende 100%

    Wie kann man darauf reagieren?
    Das versteh ich noch nicht so richtig!

    ;) Grüße Ilse
  • Naja wenn dem so ist verwendest du ja anscheinend je nach checkbox verschiedene Funktionen. Poste doch mal zwei dieser Funktionen, eine schnelle und eine langsame. Dann kann man dir auch am ehesten sagen wie du da einen sinnvollen Verlauf reinbekommst. Solange unklar ist was da geschieht kann man schlecht eine Aussage treffen wie du das am besten realisierst.

    Kommen Schleifen darin vor? Gibt es andere Anhaltspunkte wie weit die betreffende Funktion ist? Haben die Funktionen mehrere Teilschritte? Es gibt die verschiedensten Arten wie man einen Verlauf realisieren kann.
  • Ich glaube Du meinst es etwa so:
    ;)

    AutoIt

    1. ;i Hier sind keine Include nötig, aber nur bis hier! ;)
    2. Dim $arControl[5]
    3. Dim $arControlProg[5]
    4. GUICreate("Form1", 615, 440, 391, 202)
    5. For $i = 0 To 4 ;i erstellt 0 bis 4 = 5 Checkboxen, ;i statisch kein Ubound
    6. $arControl[$i] = GUICtrlCreateCheckbox("Checkbox " & $i + 1, 64, 64 + $i * 36, 97, 17)
    7. $arControlProg[$i] = GUICtrlCreateProgress(164, 64 + $i * 36, 150, 17)
    8. Next
    9. $Go = GUICtrlCreateButton("Start", 448, 164, 75, 25)
    10. GUISetState(@SW_SHOW)
    11. While 1
    12. Switch GUIGetMsg()
    13. Case -3
    14. Exit
    15. Case $Go
    16. For $i = 0 To 4
    17. If BitAND(GUICtrlRead($arControl[$i]), 1) = 1 Then ; ja die checkbox ist markiert...
    18. meinefunktion($i) ; ruft meine Funktion auf die die aktuelle Datei nun bearbeitet...
    19. EndIf
    20. Next
    21. EndSwitch
    22. WEnd
    23. Func meinefunktion($index)
    24. For $j = 0 To 100 Step 10
    25. GUICtrlSetData($arControlProg[$i], $j)
    26. Sleep(500)
    27. Next
    28. MsgBox(0, "TaTa ...", "Die Funktion wurde ausgeführt und die Einstellungen zurückgesetzt." & @TAB & @CRLF & "Bitteschön !")
    29. GUICtrlSetData($arControlProg[$i], 0)
    30. GUICtrlSetState($arControl[$i], 4)
    31. EndFunc ;==>meinefunktion
    32. ; Ende
    Alles anzeigen
  • huh...
    wie soll ich's sagen.

    Beispiel:
    Checkbox 1 soll z.B. www.eBay.de starten
    das dauert.... bis alles geladen ist.
    Checkbox 3 startet www.Google.de
    das geht flott!
    Checkbox 4 startet www.t-online.de
    ....das dauert

    Jede dieser Progressbars benötigt doch unterschiedlich lang bis 100% erreicht sind!
    Ich weiß, man muß abfragen wann die Seite kpl. geladen wurde....
    Die Frage ist die Geschwindigkeit v. 0 bis 100% für jede Seite
    Bei Google sind die 100% in 3 Sekunden erreicht (Progressbarzeit)
    Bei T-online jedoch in 6 Sekunden (Progressbarzeit) gleichmäßige Geschwindigkeit der Fortschrittanzeige!

    Hoffe ich konnte das irgendwie verständlich machen

    ;) Ilse
  • Wie man das passend zur Laufzeit macht, kann ich Dir nicht sagen. Aber Du kannst den Progress beeinflussen:

    AutoIt

    1. Func meinefunktion($index)
    2. For $j = 0 To 100 Step 10 ;i########## hier die 10 auf Step 1 setzen z.B.
    3. GUICtrlSetData($arControlProg[$i], $j)
    4. Sleep(500)
    5. Next
    6. MsgBox(0, "TaTa ...", "Die Funktion wurde ausgeführt und die Einstellungen zurückgesetzt." & @TAB & @CRLF & "Bitteschön !")
    7. GUICtrlSetData($arControlProg[$i], 0)
    8. GUICtrlSetState($arControl[$i], 4)
    9. EndFunc ;==>meinefunktion

    :thumbup:
  • Naja du müsstest dafür evtl. den Lade Progress aus dem IE oder FF auslesen. Das dürfte aber nicht ganz leicht sein. Ich vermute aber, dass du nicht nur eine Seite öffnest und das wars, sondern dass du da auch noch Formulare usw. ausfüllst und ggf. weitere Unterseiten aurufst. In diesem Fall hast du ja mehrere Schritte in deiner Funktion und kannst dadurch dann auch deine Progressbar fortschreiten lassen. Mal angenommen deine Funktion hat 7 Schritte für Seite 1 und 3 Schritte für Seite 2:

    AutoIt

    1. func google() ; dauer nicht lange hat nur 3 schritte
    2. ; funktion beginnt, also setzen wir die Progressbar auf 10
    3. guictrlsetdata($progressbar,10)
    4. ; 1. Schritt
    5. ;_ieloadwait(...)
    6. guictrlsetdata($progressbar,30)
    7. ; 2. Schritt
    8. ; irgendwas ausfüllen, geht schnell, also setzen wir den Verluaf nur ein wenig höher
    9. guictrlsetdata($progressbar,50)
    10. ; 3. Schritt Formular abschicken und aufs Ergebnis warten
    11. ; submit()
    12. guictrlsetdata($progressbar,100) ; fertig
    13. endfunc
    14. func keineahnungwas()
    15. hier das selbe, nur dass wir 7 Schritte haben und entsprechend unseren Verlauf anders verteillen.
    16. endfunc
    Alles anzeigen


    Das ist natürlich kein flüssiger Verlauf und jenachdem wie gut du abschätzen kannst wielange einzelne Teilschritte im Vergleich zur ganzen Funktion benötigen auch nicht sehr genau. Genauaer und flüssiger geht nunmal nicht solange man keine Verlaufsrückmeldung vom externen Programm erhält (in deinem Fall ja der IE oder FF). Anders würde es ausschaun, wenn du kein externes Programm benutzt und in deiner Funktion zum Beispiel eine Datei Zeilenweise verschlüsselst oder sowas, dann hast du in der Regel eine Schleife mit einer dir bekannten Durchlaufszahl und kannst den exakten Fortschritt nach jedem Schleifendurchlauf anzeigen.

    Für dich wäre vielleicht eine Marquee Progressbar interessanter, da du unmöglich vorhersagen kannst wielange deine Funktion benötigt. In solchen Fällen benutzt man dann eine Progressbar die sich kontinuierlich hin und her bewegt und erst dann stoppt wenn du die Funktion verlässt. Der Benutzer sieht also nicht wielange es wohl noch dauern könnte, aber er sieht dass noch etwas gemacht wird.

    Ein Beispiel findest du hier: autoit.de/index.php?page=Threa…ee+progressbar#post200612
  • Hallo Misterspeed,

    merci für die Erläuterungen.
    Ganz so komplex ist der Ablauf nicht!
    Es gibt je Seite 2 Schritte


    1. Form (aufruf der Formseite) sagen wir 0-50% (das ist halt unterschiedlich)
    2. _IEFormSubmit ($oForm) 51-100% (das ebenfalls, bis es übertragen wurde)

    dann die nächste...

    Das Problem ist, daß manche Seiten wirklich
    Zeit brauchen (und das muß ich sichtbar machen)

    Wenn 3 Seiten gewählt wurden, sollte man das zur Laufzeit verfolgen können.
    Das mit der Marquee Progressbar klingt interessant.
    Habe halt jetzt alles mit normalen Progressbars aufgebaut.

    Ich lese mir das mal durch.

    Liebe Grüße
    Ilse ;)
    ...und danke auch an RR04
Webutation