Moin zusammen,
jetzt sind GEM-Experten gefragt. Ich habe bei einem Programm ein seltsames Phänomen: Unter bestimmten Voraussetzungen "verschwinden" die Texte der Menüleiste. Das heißt sie werden durch eine weiße Fläche ersetzt.
Kurz zu den Umständen und dem Programm:
Ich habe in einem Fenster ein Formular zur Datenerfassung. Das ganze ist - wie bei einem Texteditor auch - von Hand programmiert. Das heißt, das Programm wartet in einer Schleife mit evnt_multi() auf Texteingaben, Nachrichten, Mausklicks. Zusätzlich gibt es noch einen Timer, der alle 500 ms den Textcursor ein- oder ausschaltet, um ein Blinken zu erzeugen.
Das ganze sieht in C etwa so aus:
int
get_char()
{
short aktion;
int ch = EOF;
do {
short evnt_ret;
short msg[8];
short mx, my, mk, key, kstat;
evnt_ret = evnt_multi(MU_MESAG | MU_TIMER | MU_BUTTON | MU_KEYBD,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, msg, 500,
&mx, &my, &mk, &kstat, &key, NULL
);
if ((evnt_ret & MU_TIMER) != 0) {
gem_cursor_blink(); // Cursor blinken lassen
}
if ((evnt_ret & MU_MESAG) != 0) {
// Reagiere irgendwie auf die Message.
}
if ((evnt_ret & MU_KEYBD) != 0) {
// Tastendruck
aktion = key_handling(kstat, key);
if (aktion == 0) {
// kein Hotkey
const int scan = key >> 8;
switch (scan) {
case SCAN_LEFT:
ch = CURSOR_LEFT;
break;
case SCAN_RIGHT:
ch = CURSOR_RIGHT;
break;
case SCAN_UP:
ch = CURSOR_UP;
break;
case SCAN_DOWN:
ch = CURSOR_DOWN;
break;
default:
ch = key & 0xff;
break;
}
}
}
if ((evnt_ret & MU_BUTTON) != 0) {
// Mausknopf
// Mach irgendwas...
}
} while (ch == EOF && aktion == 0);
if (aktion != 0) {
// Mach irgendwas ...
}
return ch;
}
Leider kommt es dabei zu dem seltsamen Effekt im Menü, wenn ich mit der Maus das Menü aktiviere, durch einen Klick irgendwohin abbreche und wieder ins Menü gehe.
Füge ich nach dem Aufruf der Blink-Funktion menu_bar(..., MENU_INSTALL) ein, ist alles prima. Die Menüzeile flackert dann natürlich alle paar Sekunden.
Die Blink-Funktion beginnt mit wind_update(BEG_UPDATE) und endet mit wind_update(END_UPDATE).
Wer kann mir einen Tipp geben, was ich falsch mache. Es geht um TOS 2.06. Der Fehler tritt sowohl in Steem SSE als auch auf echter Hardware (MegaSTE) auf. Ich wollte zwei Videos beigefügt, die das ganze illustrieren, aber das klappt irgendwie nicht (wahrscheinlich wegen der Endung mp4). Ich habe sie daher auf meinen Server gelegt:
Fehler:
http://www.graf-bussmeier.de/download/temp/fehler.mp4In Ordnung:
http://www.graf-bussmeier.de/download/temp/in_ordnung.mp4