Seite 1 von 1
ladebalken beim kopieren
Verfasst: 03.05.2009 14:46
von Sauer-RAM
Hi,
Ich würde gerne ein Programm schreiben, das ein anderes Programm auf dem Rechner installiert und damit die Leute die mein Programm damit installieren wissen wie lange es noch dauert, würde gerne ein ladebalken hinmachen. Ich weis aber nicht wie das funktioniert.
Kann mir einer mal erklären wie das geht?
danke schonmal
Verfasst: 03.05.2009 15:25
von sibru
Code: Alles auswählen
#gnr=1
If OpenWindow(0,0,0,200,60,"ProgressBar",#PB_Window_ScreenCentered | #PB_Window_SystemMenu) ;Fenster aufbauen
min=0 ;minimal-Wert des Balkens
max=100 ;maximal-Wert des Balkens
ProgressBarGadget(#gnr,20,20,160,20,min,max,#PB_ProgressBar_Smooth) ;FortschrittsBalken aufbauen
EndIf
Repeat
Status+1
SetGadgetState(#gnr,Status) ;aktuellen Wert im Balken einstellen
Select WaitWindowEvent(100)
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Verfasst: 03.05.2009 15:44
von Sauer-RAM
@sibru
danke
geht das auch in der demoversion?
Verfasst: 03.05.2009 15:53
von Kaeru Gaman
wie wärs wenn du's ersma ausprobiers?

Verfasst: 03.05.2009 16:09
von Kaeru Gaman
also....
bei komplexeren Vorgängen wie du es ja machen willst ist das etwas umfangreicher.
du musst die beiden Vorgänge trennen - den Kopier/Lade/Install/Rechen/Whatever-Vorgang und die Eventschleife für dein Fenster.
am besten geht das, wenn du den Arbeitsintensiven Vorgang in einen Thread auslagerst,
und über eine Globale oder Shared Variable den Fortschritt mitteilst.
Ich hab dir mal ein kleines Beispiel geschrieben:
- das Zählen auf der Konsole symbolisiert den eigentlichen Arbeitsvorgang
- die Shared Variable GlobalCount dient zur Übergabe des Fortschritts
- die Eventschleife ist davon unabhängig, muss aber trotzdem getimert werden um auch bei keinem event durchzulaufen.
- der Progressbar wird nur bei Null-Event, also Timeout, upgedatet.
Code: Alles auswählen
Define GlobalCount.l
Procedure Counter( dummy.l )
Shared GlobalCount.l
Protected InternalCount.l
OpenConsole()
Repeat
Print( Str(InternalCount)+", " )
InternalCount +1
If InternalCount > 99
InternalCount = 0
GlobalCount +1
EndIf
Delay(10)
Until GlobalCount => 100
CloseConsole()
EndProcedure
#Window1 = 0
#ProgressBar = 0
OpenWindow(#Window1, 0,0, 300, 200, "Zählen...")
ProgressBarGadget(#ProgressBar, 20,20, 260, 32, 0, 100, #PB_ProgressBar_Smooth)
CreateThread( @Counter(), 0 )
Repeat
EvID = WaitWindowEvent(200)
Select EvID
;**************************
Case #Null
SetGadgetState( #ProgressBar, GlobalCount )
;**************************
Case #PB_Event_CloseWindow
EXIT = 1
EndSelect
Until EXIT
Verfasst: 03.05.2009 16:13
von Vermilion
Nur so ein Tipp: Es gibt schon viele, freie Installationssysteme, mein Liebling ist NSIS, wenn du dich da ein bisschen einarbeitest (ist nicht schwer), dann sparst du dir Zeit und Arbeit, als wenn du das komplett selbst schreibst, falls du das willst.
Verfasst: 03.05.2009 20:46
von Sauer-RAM
@Vermilion
ich weis ich hab instalforge.
aber ich wollte halt einfach mal wissen wie das geht.