AutoIT functieloop

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • waztone
  • Registratie: November 2001
  • Laatst online: 13-10 17:28

waztone

de enige echte

Topicstarter
Heeft een van jullie een idee waar mijn fout in deze code zit? Ik heb de helpfile al doorgespit, verschillende fora afgezocht, maar geen passend antwoord kunnen vinden.

dit 'scriptprogje' wordt gebruikt om backups te maken. Zodra er op een knop backup geklikt wordt, wordt deze functie aangeroepen

code:
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
Func MakeBackup($source, $target)
    Local $backupcmd, $progBar, $origsize, $targetsize, $procID
    ;backup commando als volgt: $backupcmd & bronmap [spatie] doelmap
    $backupcmd = 'blablalbalblaablkabl " ; hier staat de code voor het backupcommando
        
    $procID = Run(@ComSpec & ' /c' & $backupcmd & $source & '" "' & $target & '"', "", @SW_HIDE)
    
    $origsize = DirGetSize($source)
    Do
        $progBar = GUICtrlCreateProgress(155,240,200,20)
        $targetsize = DirGetSize($target)
        $MB = DirGetSize($target) / 1024 / 1024
        $percent = $targetsize / $origsize * 100
        $decimalplace = Round($percent)
        $decimalplaceMB = Round($MB)
        
        $progBar = GUICtrlCreateProgress(155,240,200,20)
        $progLabel = GUICtrlCreateLabel("Voortgang: ",155, 225, 200, 20)
        
        GUICtrlSetData($progBar, $percent)
        GUICtrlSetData($progLabel, $decimalplace & " % " & "(" & _
        $decimalplaceMB & ") Mb is gekopieërd.")        
        
        Sleep(500)
        MsgBox(0,"","busy")
    Until NOT ProcessExists($procID)
                -------> HIER STOND: GuiCtrlSetData($progBar, $GUI_DISABLE maar dat werkte dus niet.
EndFunc


je kan in het progje verschillende mappen opgeven die je wil backuppen.
Dit werkt allemaal goed, de backups worden gemaakt, er verschijnt voor elke map netjes een progressbarretje. Maar nu komt het probleem; ik wil dat die progressbar verdwijnt als alles gebackupt is.
Nu blijft hij gewoon staan.
Hoe krijg ik het voor elkaar dat als alles gebackupt is, hij uit de loop van deze functie verdwijnt?
Het geheel is geschreven in AutoIT

All is fair in God of War


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Word de progressbar niet automatisch verwijderd als hij uit scope gaat?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • waztone
  • Registratie: November 2001
  • Laatst online: 13-10 17:28

waztone

de enige echte

Topicstarter
dat dacht ik dus ook....maar hij blijft op 100% 'hangen'.
Ik heb met een msgbox gekeken of hij wel netjes tot 100% gaat, zelfs daarna met een if-statement geprobeerd om hem dan te laten disablen, maar dat lukt ook vreemd genoeg niet.

All is fair in God of War


Acties:
  • 0 Henk 'm!

  • Lone Gunman
  • Registratie: Juni 1999
  • Niet online
Afhankelijk van de rest van je script kun je je progress control hiden of deleten.
Met GUICtrlSetState($progressbar,$GUI_HIDE) hide je je control (kan je later weer dmv $GUI_SHOW tevoorschijn halen), en met GuiCtrlDelete($progressbar) delete je de hele control.
Dus als je dat doet nadat je backup process klaar is, zou het moeten werken.

Verder viel het op dat je in je do...until loop steeds nieuwe controls aanmaakt; dat is nergens voor nodig (fout zelfs). Maak je controls aan voordat je met je polling loop begint en update ze dan in de loop.

Die 100% doet er verder niet toe, zodra je backup process stopt (om welke reden dan ook) is je loop klaar, of je nu op 100% bent of niet.

klein voorbeeldje met hiden/showen en deleten zodat het misschien iets duidelijker is:

code:
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 <GUIConstantsEx.au3>

main()

Func main()
    Opt("GUIOnEventMode", 1)
    $main_window = GUICreate("progressbarthing", 200, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "event_close_clicked")
    $start_button = GUICtrlCreateButton("start", 10, 10, 180, 20)
    GUICtrlSetOnEvent($start_button, "event_start_button_clicked")
    GUISetState(@SW_SHOW)
    
    While True
        Sleep(1000)
    WEnd
EndFunc

Func event_close_clicked()
    Exit
EndFunc

Func event_start_button_clicked()
    GUICtrlSetState(@GUI_CTRLID,$GUI_HIDE)
    make_progress()
    GUICtrlSetState(@GUI_CTRLID,$GUI_SHOW)
EndFunc

Func make_progress()
    $progressbar = GUICtrlCreateProgress(10, 40, 180, 20)
    $progresslabel = GUICtrlCreateLabel("", 10, 70, 180, 20)
    
    For $i = 0 To 100
        GUICtrlSetData($progressbar, $i)
        GuiCtrlSetData($progresslabel, $i & "% completed.")
        Sleep(50)
    Next
    
    GUICtrlDelete($progressbar)
    GUICtrlDelete($progresslabel)
EndFunc

Experience has taught me that interest begets expectation, and expectation begets disappointment, so the key to avoiding disappointment is to avoid interest.