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
StatusBarText ändert den Text nicht
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
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
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
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
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
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
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Weise weiß, dass er ein Narr ist.
Hej,
ich habe mal ein Beispiel geschrieben.
Mit WindowEvent() funktioniert es in der Statusbar
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]
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
;}
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