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? :lol:

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.