Hallo zusammen,
ich stehe mal wieder vor einem Rätsel und vielleicht kann mir einer von euch auf die Sprünge helfen, wonach ich suchen muss.
Und zwar habe ich ein GEM-Programm, um verschiedene Daten zu verwalten. Dafür gibt es unterschiedliche Eingabemasken, die in einem Fenster dargestellt werden. Die Masken können über das Pulldown-Menü aufgerufen werden oder auch über Hotkeys. Zu Beginn ist keine Maske geöffnet.
Rufe ich die erste Maske über das Pulldown-Menü auf, ist alles in Ordnung. Verwende ich dafür einen Hotkey, habe ich den Effekt, dass der erste Mausklick nicht erkannt wird. Dabei ist es unerheblich, ob ich vor dem Öffnen der Maske auf dem leeren Desktop rumgeklickt habe oder nicht.
Im Grunde ist es egal, ob ich die Maske über das Pulldown-Menü oder über den Hotkey aufrufe. Der Effekt tritt schlicht dann nicht auf, wenn ich vor dem ersten Öffnen einer Maske irgendwie das Pulldown-Menü aktiviert und die Maustaste gedrückt habe.
Das ganze passiert nur beim ersten Mal. D.h. wenn ich in eine andere Maske wechsle, tritt der Effekt nicht mehr auf.
Hier ist stark vereinfacht die Hauptschleife des Programms. Ich habe mir evnt_ret mal in eine Datei ausgeben lassen und es ist wirklich so, dass MU_BUTTON erst ab dem zweiten Drücken der Maustaste zurückgeliefert wird. Wie gesagt: Es sei denn, ich habe vorher das Pulldown-Menü verwendet und dort bereits einmal die Maustaste gedrückt.
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, CURSOR_BLINK_RATE,
&mx, &my, &mk, &kstat, &key, NULL
);
if ((evnt_ret & MU_TIMER) == MU_TIMER) {
cursor_blink();
continue;
}
if ((evnt_ret & MU_MESAG) != 0) {
event_handling(msg);
}
if ((evnt_ret & MU_KEYBD) != 0) {
DO_SOMETHING
}
if ((evnt_ret & MU_BUTTON) != 0) {
DO_SOMETHING
}
} while (...);
Was kann die Ursache sein?