Форум » [x]Harbour » Ошибка обработки мыши в MENU TO » Ответить

Ошибка обработки мыши в MENU TO

КСС: Обнаружил ошибку при обработке нажатия левой кнопки мыши в команде MENU TO: меню срабатывает вне поля кнопок этого меню. Ошибка актуальна для обеих ветвей Харбора. Ошибка находится вот здесь: [quote] #ifdef HB_COMPAT_C53 CASE K_MOUSEMOVE EXIT CASE K_LBUTTONDOWN CASE K_LDBLCLK IF ( nMouseClik := HitTest( s_aLevel[ nPointer - 1 ], ; MRow(), MCol() ) ) > 0 n := nMouseClik ENDIF IF nKey == K_LDBLCLK lExit := .T. ENDIF EXIT #endif [/quote] Этот код должен находится внутри предыдущего условия IF, а поскольку проверка на K_LDBLCLK там уже произведена, то необходимо перенести только одну строку, а эти закомментировать: [quote] #ifdef HB_COMPAT_C53 CASE K_MOUSEMOVE EXIT CASE K_LBUTTONDOWN CASE K_LDBLCLK IF ( nMouseClik := HitTest( s_aLevel[ nPointer - 1 ], ; MRow(), MCol() ) ) > 0 n := nMouseClik lExit := .T. ENDIF //IF nKey == K_LDBLCLK // lExit := .T. //ENDIF EXIT #endif [/quote] С ошибкой всё. MENU TO срабатывает на dbl-клик мыши. Мне лично это не подходит - считаю правильным, когда меню срабатывает сразу при нажатии левой кнопки мыши. Это также можно исправить здесь же: [quote] #ifdef HB_COMPAT_C53 CASE K_MOUSEMOVE EXIT CASE K_LBUTTONDOWN //CASE K_LDBLCLK IF ( nMouseClik := HitTest( s_aLevel[ nPointer - 1 ], ; MRow(), MCol() ) ) > 0 n := nMouseClik lExit := .T. ENDIF //IF nKey == K_LDBLCLK // lExit := .T. //ENDIF EXIT #endif [/quote] Также хочу поделиться своим способом внесения изменений в исходники Харбора. Возможно начинающим это пригодится. По науке, после внесения этих изменений, необходимо перекомпилировать соответствующую библиотеку. Но пойди разберись какую именно ?! Да и постоянное внесение изменений рано или поздно приведёт к появлению у пользователя третьей ветки Харбора - собственной. Ещё с Clipper-а я обнаружил, что создание в своём проекте собственной функции с именем совпадающим с именем встроенной, "накрывает" встроенную функцию. Поэтому, можно просто включить в свой проект копию файла ...\Harbour\source\rtl\menuto.prg и внести исправления в него. Если обнаружится, что разработчики исправили ошибку или внесли новый, улучшенный функционал, то файл просто исключается из проекта. Я так поступил уже с несколькими файлами исходников.

Ответов - 0



полная версия страницы