Du bist nicht angemeldet.

Kontrollzentrum

Spenden

Jeder Euro hilft uns, euch zu helfen.

Adsense

Downloads

Stabil: 3.3.8.1 (Q, H)
Stabil: 3.3.12.0 (Q, H)
Beta: 3.3.11.5 (Q, H)
SciTE: 4/5/2014 (Q, H)
Hilfe Deutsch: 12/23/2013 (Q)
Download: OrganizeIncludes (Q)
Stand: 02.06.2014 - 2:21 Uhr

Lieber Besucher, herzlich willkommen bei: AutoIt.de - Das deutsche AutoIt-Forum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

Ilse

User

  • »Ilse« ist der Autor dieses Themas

Registrierungsdatum: 2. September 2010

  • Private Nachricht senden

1

Freitag, 10. Juni 2011, 15:52

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-Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

Dim $arControl[5]
Dim $arControlProg[5]
$Form1 = GUICreate("Form1", 615, 440, 391, 202)
$arControl[1] = GUICtrlCreateCheckbox("Checkbox1", 64, 64, 97, 17)
$arControl[2] = GUICtrlCreateCheckbox("Checkbox2", 64, 100, 97, 17)
$arControl[3] = GUICtrlCreateCheckbox("Checkbox3", 64, 136, 97, 17)
$arControl[4] = GUICtrlCreateCheckbox("Checkbox4", 64, 168, 97, 17)
$arControlProg[1] = GUICtrlCreateProgress(164, 64, 150, 17)
$arControlProg[2] = GUICtrlCreateProgress(164, 100, 150, 17)
$arControlProg[3] = GUICtrlCreateProgress(164, 136, 150, 17)
$arControlProg[4] = GUICtrlCreateProgress(164, 168, 150, 17)
$Go = GUICtrlCreateButton("Start", 448, 164, 75, 25)
GUISetState(@SW_SHOW)



While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Go
        For $i = 0 To UBound($arControl) - 1
            ;if GUICtrlgetState($arControl[$i], $gui_checked) then
                ;MsgBox(0,"an","ok")
                ;endif

            next



    EndSwitch
WEnd



komm da einfach nicht weiter....


;) Grüße Ilse

Registrierungsdatum: 30. Mai 2010

  • Private Nachricht senden

2

Freitag, 10. Juni 2011, 15:59

  Spoiler Spoiler

AutoIt-Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

Dim $arControl[5]
Dim $arControlProg[5]
$Form1 = GUICreate("Form1", 615, 440, 391, 202)
$arControl[1] = GUICtrlCreateCheckbox("Checkbox1", 64, 64, 97, 17)
$arControl[2] = GUICtrlCreateCheckbox("Checkbox2", 64, 100, 97, 17)
$arControl[3] = GUICtrlCreateCheckbox("Checkbox3", 64, 136, 97, 17)
$arControl[4] = GUICtrlCreateCheckbox("Checkbox4", 64, 168, 97, 17)
$arControlProg[1] = GUICtrlCreateProgress(164, 64, 150, 17)
$arControlProg[2] = GUICtrlCreateProgress(164, 100, 150, 17)
$arControlProg[3] = GUICtrlCreateProgress(164, 136, 150, 17)
$arControlProg[4] = GUICtrlCreateProgress(164, 168, 150, 17)
$Go = GUICtrlCreateButton("Start", 448, 164, 75, 25)
GUISetState(@SW_SHOW)



While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Go
            For $i = 0 To UBound($arControl) - 1
                If GUICtrlRead($arControl[$i]) = 1 Then
                    GUICtrlSetData($arControlProg[$i], 100)
                Else
                    GUICtrlSetData($arControlProg[$i], 0)
                EndIf
            Next



    EndSwitch
WEnd
mfg BB

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

by Phillip Torrone


Zitat von »Shoutbox«

[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

Ilse

User

  • »Ilse« ist der Autor dieses Themas

Registrierungsdatum: 2. September 2010

  • Private Nachricht senden

3

Freitag, 10. Juni 2011, 16:18

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 ;)

Ilse

User

  • »Ilse« ist der Autor dieses Themas

Registrierungsdatum: 2. September 2010

  • Private Nachricht senden

4

Freitag, 10. Juni 2011, 16:18

Hallo BadBunny,

merci für deine Hilfe.

Es sollte eigentlich so sein:
1 startet, dann 3 startet
also nacheinander

hm...wie kann man die Geschwindigkeit der Progressbar bestimmen?

Liebe Grüße
Ilse ;)

RR04

User

Registrierungsdatum: 25. August 2007

  • Private Nachricht senden

5

Freitag, 10. Juni 2011, 16:19

AutoIt-Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
;i so sind keine Include nötig! ;)
Dim $arControl[5]
Dim $arControlProg[5]
GUICreate("Form1", 615, 440, 391, 202)
For $i = 0 To 4 ;i erstellt 0 bis 4 = 5 Checkbox
$arControl[$i] = GUICtrlCreateCheckbox("Checkbox" & $i, 64, 64+$i*36, 97, 17)
$arControlProg[$i] = GUICtrlCreateProgress(164, 64+$i*36, 150, 17)
Next
$Go = GUICtrlCreateButton("Start", 448, 164, 75, 25)

GUISetState(@SW_SHOW)

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
        Case $Go
            For $i = 0 To UBound($arControl) - 1
                If GUICtrlRead($arControl[$i]) = 1 Then
                    GUICtrlSetData($arControlProg[$i], 100)
                Else
                    GUICtrlSetData($arControlProg[$i], 0)
                EndIf
            Next
    EndSwitch
WEnd
; Ende

Ilse

User

  • »Ilse« ist der Autor dieses Themas

Registrierungsdatum: 2. September 2010

  • Private Nachricht senden

6

Freitag, 10. Juni 2011, 16:25

Hallo RR04,

das Problem:
die Progressbars sollten nacheinander starten

Danke für die Hilfe

;) Ilse

Ilse

User

  • »Ilse« ist der Autor dieses Themas

Registrierungsdatum: 2. September 2010

  • Private Nachricht senden

7

Freitag, 10. Juni 2011, 16:38

...
habe Sleep eingebaut!
Kommt jetzt nacheinander,
aber immer noch zu schnell

AutoIt-Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
;i so sind keine Include nötig! ;)
Dim $arControl[5]
Dim $arControlProg[5]
GUICreate("Form1", 615, 440, 391, 202)
For $i = 0 To 4 ;i erstellt 0 bis 4 = 5 Checkbox
$arControl[$i] = GUICtrlCreateCheckbox("Checkbox" & $i, 64, 64+$i*36, 97, 17)
$arControlProg[$i] = GUICtrlCreateProgress(164, 64+$i*36, 150, 17)
Next
$Go = GUICtrlCreateButton("Start", 448, 164, 75, 25)

GUISetState(@SW_SHOW)

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
        Case $Go
            For $i = 0 To UBound($arControl) - 1
                If GUICtrlRead($arControl[$i]) = 1 Then
                    GUICtrlSetData($arControlProg[$i], 100)
                Else
                    GUICtrlSetData($arControlProg[$i], 0)
                EndIf
                Sleep(2000)
            Next
    EndSwitch
WEnd
; Ende

Registrierungsdatum: 6. März 2010

Beruf: System Administrator

  • Private Nachricht senden

8

Freitag, 10. Juni 2011, 16:43

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-Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for $i = 0 to ubound($checkarray) -1
   If BitAnd(GUICtrlRead($checkarray[$i]),$GUI_CHECKED) = $GUI_CHECKED Then ; ja die checkbox ist markiert...
      meinefunktion($i) ; ruft meine Funktion auf die die aktuelle Datei nun bearbeitet...
   endif
next

func meinefunktion($index)
   ; 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
   ; copy(...) ; Beispielhafte aktion
  ; zur Demonstration ein Dreistufiger verlauf
   sleep(333)
   guictrlsetdata($progarr[$index], 33)
   sleep(333)
   guictrlsetdata($progarr[$index], 66)
   sleep(333)
   guictrlsetdata($progarr[$index], 100)
endfunc

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »misterspeed« (10. Juni 2011, 17:02)


Ilse

User

  • »Ilse« ist der Autor dieses Themas

Registrierungsdatum: 2. September 2010

  • Private Nachricht senden

9

Freitag, 10. Juni 2011, 17:32

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

Registrierungsdatum: 6. März 2010

Beruf: System Administrator

  • Private Nachricht senden

10

Freitag, 10. Juni 2011, 17:41

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.

RR04

User

Registrierungsdatum: 25. August 2007

  • Private Nachricht senden

11

Freitag, 10. Juni 2011, 17:56

Ich glaube Du meinst es etwa so:
;-)

AutoIt-Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
;i Hier sind keine Include nötig, aber nur bis hier! ;)
Dim $arControl[5]
Dim $arControlProg[5]
GUICreate("Form1", 615, 440, 391, 202)
For $i = 0 To 4 ;i erstellt 0 bis 4 = 5 Checkboxen, ;i statisch kein Ubound
    $arControl[$i] = GUICtrlCreateCheckbox("Checkbox " & $i + 1, 64, 64 + $i * 36, 97, 17)
    $arControlProg[$i] = GUICtrlCreateProgress(164, 64 + $i * 36, 150, 17)
Next
$Go = GUICtrlCreateButton("Start", 448, 164, 75, 25)

GUISetState(@SW_SHOW)

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
        Case $Go
            For $i = 0 To 4
                If BitAND(GUICtrlRead($arControl[$i]), 1) = 1 Then ; ja die checkbox ist markiert...
                    meinefunktion($i) ; ruft meine Funktion auf die die aktuelle Datei nun bearbeitet...
                EndIf
            Next
    EndSwitch
WEnd

Func meinefunktion($index)
    For $j = 0 To 100 Step 10
        GUICtrlSetData($arControlProg[$i], $j)
        Sleep(500)
    Next
    MsgBox(0, "TaTa ...", "Die Funktion wurde ausgeführt und die Einstellungen zurückgesetzt." & @TAB & @CRLF & "Bitteschön !")
    GUICtrlSetData($arControlProg[$i], 0)
    GUICtrlSetState($arControl[$i], 4)
EndFunc   ;==>meinefunktion

; Ende

Ilse

User

  • »Ilse« ist der Autor dieses Themas

Registrierungsdatum: 2. September 2010

  • Private Nachricht senden

12

Freitag, 10. Juni 2011, 18:10

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

RR04

User

Registrierungsdatum: 25. August 2007

  • Private Nachricht senden

13

Freitag, 10. Juni 2011, 18:16

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

AutoIt-Quellcode

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

:thumbup:

Registrierungsdatum: 6. März 2010

Beruf: System Administrator

  • Private Nachricht senden

14

Freitag, 10. Juni 2011, 18:40

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-Quellcode

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

func keineahnungwas()
hier das selbe, nur dass wir 7 Schritte haben und entsprechend unseren Verlauf anders verteillen.
endfunc


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: http://autoit.de/index.php?page=Thread&p…sbar#post200612

Ilse

User

  • »Ilse« ist der Autor dieses Themas

Registrierungsdatum: 2. September 2010

  • Private Nachricht senden

15

Freitag, 10. Juni 2011, 18:59

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

Registrierungsdatum: 6. März 2010

Beruf: System Administrator

  • Private Nachricht senden

16

Freitag, 10. Juni 2011, 19:07

Veilleicht weiss ja jemand wie man den Verlauf des IE ausliest. Sollte prinzipiell ja möglich sein, sich eine eigene wait Funktion zu basteln die den Verlauf der aktuellen Browser Aktion auswertet. Das wäre wie gesagt der einzige Weg um hier einen flüssigen und exakten Verlauf reinzubekommen.

Ilse

User

  • »Ilse« ist der Autor dieses Themas

Registrierungsdatum: 2. September 2010

  • Private Nachricht senden

17

Freitag, 10. Juni 2011, 19:18

Hallo Misterspeed,

habe das in deinem Link entdeckt

AutoIt-Quellcode

1
2
                    $progress = GUICtrlCreateProgress(10, 60, 380, 25, 0x08)
                    GUICtrlSendMsg($progress, 0x040A, 1, 10


sieht interessant aus,
aber das Problem mit den 100% wenn die Seite fertig ist, bleibt.

Ich schau mal, ob ich noch was finde

;) Ilse

autoit.de Webutation