Все дело в том, что если клик пришелся между вызовами
GUI->Update() и Context->Open(), то сначала открывается меню, а потом ГУИ узнает о клике, видит что клик за пределами контекстного меню и сразу закрывает его.
Соответственно чем между кода между этими функциями, тем меньше вероятность такой ситуации.
Вариант решения:
If MouseDown(2) Then
If (pressed < 2) Then
pressed = pressed + 1
alOpenContext(context, 0, 0, MouseX(), MouseY(), width, height, alGetValueI(fm_point_pos), alGetValueI(fm_point_menu));
EndIf
Else
pressed = 0
EndIf
pressed < 2 - Чтобы если случилась выше описанная ситуация, то контекст мог открыться повторно, когда ГУИ уже знает о клике и не станет закрывать контекст
Если бы
FlushMouse() работал, то так мудрить не пришлось бы