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
ladebalken beim kopieren
- Sauer-RAM
- Beiträge: 326
- Registriert: 13.04.2009 16:22
- Computerausstattung: Lenovo ThinkPad X230t Convertible
- Wohnort: Haslach i. K.
ladebalken beim kopieren
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
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


-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- Sauer-RAM
- Beiträge: 326
- Registriert: 13.04.2009 16:22
- Computerausstattung: Lenovo ThinkPad X230t Convertible
- Wohnort: Haslach i. K.
@Vermilion
ich weis ich hab instalforge.
aber ich wollte halt einfach mal wissen wie das geht.
ich weis ich hab instalforge.
aber ich wollte halt einfach mal wissen wie das geht.
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein