Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира  
   Турбо Вижн    >>    free
   
 
 Русификация Turbo Vision для TP6.0  Игорь Мигитко 30.11.1993

Ниже приводится main module с руссифицированной строкой меню, к которому должны цепляться остальные необходимые для работы программы модули



4k 
 

From: igor@serbi.vologda.su (Migitko Igor) Organization: BITPRESS Ltd {Ниже приводится main module с руссифицированной строкой меню, } {к которому должны цеплятся остальные } {необходимые для работы программы модули. Пояснения краткие. Если } {что-то непонятно пишите, если смогу объясню. } {без сомнений, можно сделать и лучше. } { igor@serbi.vologda.su Игорь Мигитко } (* Основная идея ------------- Давайте разберемся, что происходит при нажатии комбинации Alt+буква. На мой взгляд следующее: 1. Метод TApplication.GetEvent генерирует событие Event c полями Event.What:= evKeyDown; Event.KeyCode:= kbAlt+буква; 2. Это событие направляется в видимые элементы, в частности, в TMenuBar. Объект TMenuBar имеет метод FindItem(Ch : Char), который возвращает указатель на элемент меню, который имеет Ch как горячую клавишу. Когда искомое событие попадает в TMenuBar.HandleEvent вызывается метод FindItem и если возвращаемый указатель не Nil, то элемент меню с таким Сh в качестве горячей клавиши существует. 3. Если такой элемент найден, то генерируются команды перерисовки для видимых элементов и выбранный элемент делается активным. В приведенной ниже программе все действия по руссификации полняются в методе TApplication.GetEvent, который оглядываясь вокруг, смотрит не произошло ли чего-либо похожего на событие, и если произошло, то формирует запись события (Event). Вначале вызывается родной GetEvent и делает свое черное дело. Нажатие kbAlt+буква генерирует скан-код у которого младшая часть т.е. Lo(Event.KeyCode):= 0. Значит, проверяем, вызвано ли событие нажатием клавиш kbAlt+буква т.е. If (Event.What = evKeyDown) и If (Lo(Event.KeyCode) = 0) и, если истина, то на мины. Find_And_Substitute(Event) - процедурка, которая определяет есть ли в строке меню пункт соответствующий данной комбинации, и если да, то подменяет название пункта на соотвествующий английский символ, запоминает старое название, взводит флаг MyReDraw, сигнализирующий, что произошла подмена. Строки в методе TApplication.GetEvent If ((PView(MenuBar) = Current) Or (M