StatusBarText ändert den Text nicht

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Prowokant
Beiträge: 34
Registriert: 11.05.2006 13:46
Wohnort: Münster

StatusBarText ändert den Text nicht

Beitrag von Prowokant »

Hallo,

hat es einer von euch geschafft StatusBarText dazu zu bringen mehrfach auf ein und dasselbe Feld angewendet zu funktionieren?

Ich habe einige wenige Programmteile, die recht zeitintensiv sein können. Ich möchte da eine Meldung in die Statusleiste bringen und am Ende wieder löschen.

Das klappt mit meinem Code unter Windows einwandfrei. Unter Ubuntu aber leider nicht. Der Text des ersten StatusBarText erscheint und bleibt unverändert.

Hat jemand so etwas schon mal geschafft?

Mein Ubuntu und mein PB sind aktuell.

Bye
Prowokant
Prowokant
Beiträge: 34
Registriert: 11.05.2006 13:46
Wohnort: Münster

Beitrag von Prowokant »

Noch mal hallo,

also der Text kann doch geändert werden.
Das Problem liegt etwas anders:
Am Anfang der zeitintensiven Prozedur wird der Text geändert.
Dann werden noch ein paar Prozeduren aufgerufen, die alle die
Statusmeldungen ausgeben sollten. Ich sehe aber keine davon.

Unter Windows wird die Meldung in dem Moment ausgegeben,
in dem sie im Code steht. Unter Ubuntu erfolgt die Ausgabe erst,
wenn das Programm wieder in der Eventverarbeitung landet.
Der letzte Text (und das ist natürlich der, der auch vorher da
stand) ist dann wieder zu sehen. Ich sehe also keine der Texte
die da zwischendurch erscheinen sollten.

Kann ich da irgendwas einbauen damit die Ausgabe sofort
erfolgt? Das sollte natürlich nichts OS-spezifisches sein, da
der Code ja dann nicht mehr portabel wäre.

Hoffentlich hat jemand 'ne Idee.

Bye
Prowokant
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

Hallo,

also für mich hört sich das so an, als müsstest du eben noch mal die Events abfragen. Damit das Fenster aktualisiert wird.

Wie du das jetzt löst ist natürlich eine andere Sache.

Wenn ich heute Abend Zeit haben sollte, kann ich ja mal gucken. Weiss aber nicht genau, wann das was wird. Wie gesagt: wenn.

Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Prowokant
Beiträge: 34
Registriert: 11.05.2006 13:46
Wohnort: Münster

Beitrag von Prowokant »

Hi tmjuk,

habe es anders gemacht. Nun klappt es.
Ich finde das mit der Statuszeile aber echt
blöd vom Handling im Programm her.

Naja, danke an alle, die versucht haben
mir zu helfen.

Bye
Prowokant
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

Hej,

es wäre nett, wenn du ein kleines Stück Beispielcode posten könntest.
Dann hat der nächste schon mal einen Lösungsansatz.


Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Prowokant
Beiträge: 34
Registriert: 11.05.2006 13:46
Wohnort: Münster

Beitrag von Prowokant »

Hi tmjuk,

ich nutze nun Gadgets. Ich hatte auch Probleme eine kleine
Grafik in der Statuszeile bzgl. veränderter Darstellung zu händeln.
Mit den Text und Image Gadgets klappt es und es sieht auch
nicht schlecht aus. Ich habe also keine wirkliche Lösung für
das Verändern von Texten und Grafiken in der Statusleiste.

Bye
Prowokant
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hi.

also, wenn du irgendwelche Anzeigen oder Inhalte änderst, musst du Events verarbeiten,
d.h. dein Programmablauf muss mehrfach an einem (Wait)WindowEvent vorbeikommen,
weil dass nicht nur dir ermöglicht, auf deine Events zu reagieren,
sondern auch die nach "außen" weiterreicht, die vom OS weiterverarbeitet werden müssen,
wie zum beispiel ändern und refreshen der fensteroberfläche.

wenn du das eben nichts machst, sondern nur was anzeigst, dann ne menge rechnest,
dann wieder die Anzeige änderst und dann erst zurück in deine Hauptschleife kommst,
wirst du auch erst dann eine Änderung der Anzeige sehen weil eben erst dann die Events verarbeitet werden.


ps:
ups, ich seh jetz erst, dass das ja die LINUX-ecke ist...
also, das was ich geschrieben hab bezieht sich auf meine Erfahrungen mit Windows.
... aber es ist durchaus wahrscheinlich, dass für Linux-Fensterle das selbe gilt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

Hej,

ich habe mal ein Beispiel geschrieben.
Mit WindowEvent() funktioniert es in der Statusbar

Code: Alles auswählen

; Test Statusbar Linux
; August 2009
; PB 4.40 Beta

;{ Enumeration

Enumeration 
	#fe_main
	
	#stb_main
	
	#ga_main_button
	
	#bild_1
	
	
EndEnumeration

;}

;{ Variablen

EnableExplicit
Global Event.l
Global Quit.l

Global i.l
Global j.l
Global k.l
Global l.l

;}

;{ Prozeduren

Procedure auf_geht_es()
	For i = 1 To 10000
		j = i * i
		k + 1
		If k = 10
			k = 0
			l + 1
			If l = 256
				l = 0
			EndIf
			StartDrawing(ImageOutput(#bild_1))
				Box(0, 0, 16, 16, RGB(l, l, l))
			StopDrawing()
		EndIf

		StatusBarText(#stb_main, 1, " Ergebnis: " + Str(j))
		StatusBarImage(#stb_main,0,ImageID(#bild_1))
		
		

		WindowEvent()
		
	Next i
EndProcedure

;}

;{ Init
If CreateImage(#bild_1,16,16,32)
Else
	Debug "Konnte Bild nicht erstellen"
	End
EndIf

If OpenWindow(#fe_main, 0, 0, 400, 200, "Probefenster", #PB_Window_SystemMenu)
Else
	Debug "Konnte Fenster nicht erstellen"
	End
EndIf


ButtonGadget(#ga_main_button, 150, 80, 100, 25, "Auf geht es")

CreateStatusBar(#stb_main, WindowID(#fe_main))
AddStatusBarField(20)
AddStatusBarField(#PB_Ignore)
StatusBarImage(#stb_main,0,ImageID(#bild_1))
StatusBarText(#stb_main,1," Ergebnis:")

;}

;{ Ereignisschleife
Repeat
	Event = WaitWindowEvent()
	
	If Event = #PB_Event_Gadget
		Select EventGadget()
			Case #ga_main_button
				auf_geht_es()
			
		EndSelect
	EndIf
	
	If Event = #PB_Event_CloseWindow
		Quit = 1
	EndIf
	
	
Until Quit = 1 
;}


Den Unterschied sieht man, wenn man WindowEvent() aus der Prozedur entfernt.

Bei Bildern in der Statusbar unter Linux bin ich allerdings erst mal überfragt.

Edit: Und siehe da, mit PB 4.40 klappt es auch mit den Bildern in der Statusbar.


Torsten[/b]
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Antworten