Für mein erstes PureBasic-Linux Projekt probiere ich die dafür benötigten Funktionen, um nach & nach ein Gefühl dafür zu kriegen, bevor ich dann das eigentliche Hauptprogramm beginne.
Jetzt bin ich auf Schwierigkeiten mit der Verwendung der Statusleiste und Progressbar gestossen und versteh einfach nicht das Problem.
Die Statusbar lässt sich in einer Schleife einfach nicht aktualisieren. Das gleiche mit dem TextGadged. Um einen ProgrammLogik-Fehler auszuschliessen, hab ich das mal parallel auf Win7 ausgeführt - da löppelt es so, wie erwartet.
Habe dafür mal zur Demo den Testcode aufbereitet, der das Problem demonstriert. Vllt. fehlt mir für Linux ja nur irgendeine Lib oder eine Einstellung in der IDE - keine Ahnung.
Getestet mit:
PureBasic 5.62 auf Mint 17.3 xfce x64
PureBasic 5.70 auf Mint 18.3 xfce, 18.1-3 Mate (alles x64)
Wär für einen Denkanstoss dankbar...
;test für statuszeile & textgadget PureBasic 5.70 (gtk2 / Mint 18.1-3 x64)
If OpenWindow(0, 0, 0, 510, 100, "StatusBarProgress-Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
Define.i a,b,c ;integer
If CreateStatusBar(0, WindowID(0))
AddStatusBarField(100)
AddStatusBarField(400)
EndIf
TextGadget(1, 200, 30, 250, 20, "Statusbar und Text Demo") ;textgadget erzeugen
c = 3
For a = c To 1 Step -1 ;coundown soll das setzen des textgadges demonstrieren
SetGadgetText(1, "Demo-Aktion startet in " + Str(a) + " Sekunden") : Debug a ;<---keine textanzeige
Delay(1000)
Next a
SetGadgetText(1,"-START-") : Debug "-Start-" ;<---keine textanzeige
For a = 1 To 100 ;schleife, die irgendwas abarbeitet incl. status- & fortschrittanzeige
;Aktion simulieren:
For b = 1 To 1000000 ;geschwindigkeit kann hier angepasst werden (abhängig vom subsystem und debugger))
c = b
Next b
;Kontrollanzeigen für die Hauptschleife:
StatusBarText(0, 0, "Loop " + Str(a)) : Debug "Loop " + Str(a) ;<---keine textanzeige
StatusBarProgress(0,1,a) ;<---keine fortschrittsanzeige
SetGadgetText(1, "Loop " + Str(a)) ;<---keine textanzeige
Next a
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
StatusBarText(0,0,"ENDE") : Debug "ENDE gedrückt" ;<---keine textanzeige
StatusBarText(0,1,"Auch hier keine Anzeige") ;<---keine textanzeige
Delay(3000)
Debug "Aus"
EndIf
Alles anzeigen