|
•(Протестировано) Баги с менюшками - Hruks, 03.06.2010 19:00:57 |
|
|
Вот тут: http://www.rumaxclub.ru/forum_2/lv_4/post_6869.htm писал уже про баг с менюшками. Криво закрываются. Подебажил немного и нашёл что не так. Исправления на бранче: svn://maxgold.rumaxclub.ru:46022/maxgold/branches/hruks_MenuFix
Вот полный список: Убирается меню юнита при вызове меню File и Отчёт Исправил появление окна отчётов при выборе юнита из отчётов Рефакторинг определения виртуальных кнопок. Поправил опечатку mg_menu.blpmod вместо mg_menu.blbmod. Пониятия не имею что это, но должно быть так :)
Вот из-за того, чтобы сделать нормальную функцию procedure SetGameMenu(MenuNum:byte) begin game_menu_num:=MenuNum; mg_menu.game_menu_num:=MenuNum; mg_menu.rmnu:=false; // возможно ещё какие-то полезные инициализирующие действия end;
...в коде везду используются зануления переменных по отдельности. Ессно, где-то это забывается и возникают такие вот баги.
И вообще весь ввод-вывод нужно было разнести по разным модулям - стейты + общие кнопки, типа Alt+F4 + менюшки. Очень мало менюшек, которые одновременно на экране. Так зачем каждый раз проверять что за меню сейчас? Не проще ли держать указатель текущего меню и таблицу, в котором будут зарегистрированы все input обработчики этого диалога? Меню сменилось - указатели прописались. Нет менюшки - указатели пустые. Сработала какая-нить функция типа mg_keyup и проверила - для keyup есть обработчик у текущего меню/диалога? Есть - вызвали. Нет, пошли далее - вызывать обработчики стейта. А обработчик возвращает результат - его это кнопка или дальше пускать её процессинг. Для модельных диалогов например дальше пускать не надо, даже если кнопка не опознана.
Ладно, опять я увлёкся. Проверяй дельту и заливай в транк, если ок. |
|
| |