:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки ::
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  


Форумы  :: FAQ FoxPro

При запуске меню появляется сообщение о синтаксической ошибке
Дата: 20.03.05 17:29:53 ОтветитьЦитировать

Проблема

Создаю меню в дизайнере меню. Но при запуске меню на исполнение появляется сообщение о синтаксической ошибке. Если его проигнорировать, то дальнейшая работа происходит без ошибок.

Причина

Проблема связана с некорректной интерпретацией русских букв в качестве "горячих клавиш" в основной линейке меню.

"Горячая клавиша" - это клавиша или набор клавиш, нажатие на которые вызывает выполнение соответствующего пункта меню без необходимости выбора его мышкой.

Дело в том, что если, для пункта в основной линейке меню явно не указана "горячая клавиша", то по умолчанию, штатным генератором меню в качестве "горячей клавиши" назначается комбинация клавиши Alt и первого символа названия пункта меню. Как правило, это русская буква. В результате, генератор меню создает команду вида

DEFINE PAD _1h610hbkn OF _MSYSMENU PROMPT "Пример" COLOR SCHEME 3 ;
KEY ALT+П, ""
Вот в момент выполнения подобной команды и возникает сообщение о синтаксической ошибке на фрагменте "KEY ALT+П". Игнорирование этой ошибки приводит к тому, что на данный пункт меню просто не назначается горячая клавиша. Хотя сам пункт меню успешно создается.

Решение

Решение заключается в том, чтобы для всех пунктов основной линейки меню принудительно назначать горячие клавиши. Например, русской букве "П" соответствует латинская буква "G" (одна и та же клавиша). Вот и следует назначить для PAD-пункта "Пример" горячую клавишу "Alt+G".

Правда, возможно и другое решение.

За генерацию меню отвечает специальная программа Genmenu.prg Ее можно отредактировать, для того, чтобы подавить автоматическую генерацию горячих клавиш, если они не были заданы явно. Для этого вызываете данную программу на редактирование:

MODIFY COMMAND (Home()+"genmenu.prg")
За добавление горячих клавиш отвечает функция AddKey. Перейдите к этой функции на команду

FUNCTION addkey
и закомментируйте в этой функции весь условный оператор, начинающийся с фразы:

IF !IsLeadByte(prompt)
Однако оставьте не закомментированной в нем единственную строчку

STORE "" to m.cKeyname
Т.е. соответствующий кусок программы должен выглядеть так:

*!* IF !IsLeadByte(prompt)
*!* STORE c_key_padhotkey_LOC + UPPER(LEFT(prompt,1)) TO m.cKeyname
*!* ELSE
STORE "" to m.cKeyname
*!* ENDIF
Сохраните и откомпилируйте измененный файл GenMenu.prg.

Все. Теперь Вам остается только повторить генерацию всех ранее созданных меню. Сообщение о синтаксической ошибке больше возникать не будут.

О других способах решения данной проблемы можно почитать здесь

Устранение сообщения о синтаксической ошибке при запуске меню



Отредактировано (20.03.05 20:37)


------------------
Ratings: 0 negative/0 positive


Тема Просмотров Написано Написано
  Menu 5293 Владимир Максимов 01.03.05 21:56
  При запуске меню появляется сообщение о синтаксической ошибке 8255 Владимир Максимов 20.03.05 17:29
  Как добавить в меню список открытых окон 287083 Владимир Максимов 22.03.05 10:56
  Почему в готовом EXE не работает копирование по Ctrl+C, Ctrl+V 9263 Владимир Максимов 29.06.05 20:49
  Как изменить шрифт пунктов меню в дизайнере меню 8252 Владимир Максимов 12.11.05 21:28
  В готовом EXE все меню или его часть отображается не по русски 4399 Владимир Максимов 30.12.06 17:02


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 2 (Гостей: 2)

© 2006 Fox Club 
Яндекс.Метрика