Форум » [x]Harbour » ALT_русские буквы и PAD_5 в gtwin (xHarbour 1.0.0) » Ответить

ALT_русские буквы и PAD_5 в gtwin (xHarbour 1.0.0)

a_sidorov: Подключил ALT_Русские буквы и PAD (K_PAD_5 332 // PAD5) в gtwin xHarbour 1.0.0. Может быть кому-то пригодится. 1.Добавляем коды клавиш #define CLIP_STDKEY_COUNT 160 // вместо 96 В static const ClipKeyCode stdKeyTab[CLIP_STDKEY_COUNT] = { добавляем коды {128, K_ALT_F, K_CTRL_F, 0, K_ALT_F}, // 'А' {129, 0, 0, 0, 0}, // 'Б' {130, K_ALT_D, K_CTRL_D, 0, K_ALT_D}, // 'В' {131, K_ALT_U, K_CTRL_U, 0, K_ALT_U}, // 'Г' {132, K_ALT_L, K_CTRL_L, 0, K_ALT_L}, // 'Д' {133, K_ALT_T, K_CTRL_T, 0, K_ALT_T}, // 'Е' {134, 0, 0, 0, 0}, // 'Ж' {135, K_ALT_P, K_CTRL_P, 0, K_ALT_P}, // 'З' {136, K_ALT_B, K_CTRL_B, 0, K_ALT_B}, // 'И' {137, K_ALT_Q, K_CTRL_Q, 0, K_ALT_Q}, // 'Й' {138, K_ALT_R, K_CTRL_R, 0, K_ALT_R}, // 'К' {139, K_ALT_K, K_CTRL_K, 0, K_ALT_K}, // 'Л' {140, K_ALT_V, K_CTRL_V, 0, K_ALT_V}, // 'М' {141, K_ALT_Y, K_CTRL_Y, 0, K_ALT_Y}, // 'Н' {142, K_ALT_J, K_CTRL_J, 0, K_ALT_J}, // 'О' {143, K_ALT_G, K_CTRL_G, 0, K_ALT_G}, // 'П' {144, K_ALT_H, K_CTRL_H, 0, K_ALT_H}, // 'Р' {145, K_ALT_C, K_CTRL_C, 0, K_ALT_C}, // 'С' {146, K_ALT_N, K_CTRL_N, 0, K_ALT_N}, // 'Т' {147, K_ALT_E, K_CTRL_E, 0, K_ALT_E}, // 'У' {148, K_ALT_A, K_CTRL_A, 0, K_ALT_A}, // 'Ф' {149, 282, 27, 0, 0}, // 'Х' {150, K_ALT_W, K_CTRL_W, 0, K_ALT_W}, // 'Ц' {151, K_ALT_X, K_CTRL_X, 0, K_ALT_X}, // 'Ч' {152, K_ALT_I, K_CTRL_I, 0, K_ALT_I}, // 'Ш' {153, K_ALT_O, K_CTRL_O, 0, K_ALT_O}, // 'Щ' {154, 283, 29, 0, 0}, // 'Ъ' {155, K_ALT_S, K_CTRL_S, 0, K_ALT_S}, // 'Ы' {156, K_ALT_M, K_CTRL_M, 0, K_ALT_M}, // 'Ь' {157, 0, 0, 0, 0}, // 'Э' {158, 0, 0, 0, 0}, // 'Ю' {159, K_ALT_Z, K_CTRL_Z, 0, K_ALT_Z}, // 'Я' {160, K_ALT_F, K_CTRL_F, 0, K_ALT_F}, // 'а' {161, 0, 0, 0, 0}, // 'б' {162, K_ALT_D, K_CTRL_D, 0, K_ALT_D}, // 'в' {163, K_ALT_U, K_CTRL_U, 0, K_ALT_U}, // 'г' {164, K_ALT_L, K_CTRL_L, 0, K_ALT_L}, // 'д' {165, K_ALT_T, K_CTRL_T, 0, K_ALT_T}, // 'е' {166, 0, 0, 0, 0}, // 'ж' {167, K_ALT_P, K_CTRL_P, 0, K_ALT_P}, // 'з' {168, K_ALT_B, K_CTRL_B, 0, K_ALT_B}, // 'и' {169, K_ALT_Q, K_CTRL_Q, 0, K_ALT_Q}, // 'й' {170, K_ALT_R, K_CTRL_R, 0, K_ALT_R}, // 'к' {171, K_ALT_K, K_CTRL_K, 0, K_ALT_K}, // 'л' {172, K_ALT_V, K_CTRL_V, 0, K_ALT_V}, // 'м' {173, K_ALT_Y, K_CTRL_Y, 0, K_ALT_Y}, // 'н' {174, K_ALT_J, K_CTRL_J, 0, K_ALT_J}, // 'о' {175, K_ALT_G, K_CTRL_G, 0, K_ALT_G}, // 'п' {224, K_ALT_H, K_CTRL_H, 0, K_ALT_H}, // 'р' {225, K_ALT_C, K_CTRL_C, 0, K_ALT_C}, // 'с' {226, K_ALT_N, K_CTRL_N, 0, K_ALT_N}, // 'т' {227, K_ALT_E, K_CTRL_E, 0, K_ALT_E}, // 'у' {228, K_ALT_A, K_CTRL_A, 0, K_ALT_A}, // 'ф' {229, 282, 27, 0, 0}, // 'х' {230, K_ALT_W, K_CTRL_W, 0, K_ALT_W}, // 'ц' {231, K_ALT_X, K_CTRL_X, 0, K_ALT_X}, // 'ч' {232, K_ALT_I, K_CTRL_I, 0, K_ALT_I}, // 'ш' {233, K_ALT_O, K_CTRL_O, 0, K_ALT_O}, // 'щ' {234, 283, 29, 0, 0}, // 'ъ' {235, K_ALT_S, K_CTRL_S, 0, K_ALT_S}, // 'ы' {236, K_ALT_M, K_CTRL_M, 0, K_ALT_M}, // 'ь' {237, 0, 0, 0, 0}, // 'э' {238, 0, 0, 0, 0}, // 'ю' {239, K_ALT_Z, K_CTRL_Z, 0, K_ALT_Z}, // 'я' после else if ( ch < 0 ) // international keys { ch += 256; Добавляем if (ch>223) { clipKey = &stdKeyTab[ ch - K_SPACE-48]; } else { clipKey = &stdKeyTab[ ch - K_SPACE]; } } 2.Для подключения K_PAD в функцию int HB_GT_FUNC(gt_ReadKey( HB_inkey_enum eventmask )) преред if ( s_bSpecialKeyHandling && ( dwState & CAPSLOCK_ON ) && s_osv.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) { вставляем строки if (wKey==76 & s_irInBuf[ s_cNumIndex ].Event.KeyEvent.wVirtualKeyCode==12) { ch=332; }

Ответов - 8

Andrey: Хоть бы пример дал где это использовать .....

a_sidorov: У меня PAD используется для настройки размера колонки (ячейки) таблицы по горизонтали и вертикали в несколько строк с переносом, очень удобно. А с ALT все понятно - реально у меня задействованы все комбинации букв с ALT (например ALT_P -печать). Практичеки все строки меню задублированы комбинацией клавиш. Приходится все время переключать на аглийский шрифт. Неудобно ведь.

Лукашевский: a_sidorov пишет: Подключил ALT_Русские буквы А не будет ли так любезен многоуважаемый джинн... прислать готовый GTWIN.OBJ ? А то я при компиляции имеющегося у меня GTWIN.C с внесёнными см. выше изменениями получаю: Error E2451 GTWIN.C 1606: Undefined symbol 'hb_cdp_page' in function hb_gt_win_SetDispCP Error E2451 GTWIN.C 1648: Undefined symbol 'hb_cdp_page' in function hb_gt_win_SetKeyCP Warning W8075 GTWIN.C 1887: Suspicious pointer conversion in function hb_gt_FuncInit Warning W8075 GTWIN.C 1893: Suspicious pointer conversion in function hb_gt_FuncInit Warning W8075 GTWIN.C 1894: Suspicious pointer conversion in function hb_gt_FuncInit *** 2 errors in Compile *** Моё мыло aynn [at] li.ru


a_sidorov: Отправил. Понятно, почему в этой версии gtwin нет раскладки национальных клавиатур под ALT. Принципиально кодировка сделана на таблице и она своя под каждый язык. Ее нужно добавлять вручную под русские буквы.

Andrey: a_sidorov пишет: Ее нужно добавлять вручную под русские буквы. А почему ее нельзя сделать переключением кодовых страниц в исходниках ? Но наверно это вопрос к нашим админам !

a_sidorov: Так как написан драйвер сейчас, в исходниках нужно забить все национальные кодовые станицы на разных языках. Если бы анализировался скан код клавиши, это можно было бы сделать независимо от кода страницы. Можно попробовать в драйвер вставить перекодировку по скан коду (можно сослаться на ту же таблицу с раскладки для латиницы), только зачем нам это нужно, мы же не собираемся писать, например, для украинской раскладки. Вставили коды русских букв и забыли о проблеме.

Лукашевский: Александр, спасибо! В исправленной тобой версии GTWIN от xHarbour 1.2.0 вроде всё работает!

a_sidorov: В gtwin для Xharbour 1.2.0 правки те же, что и для 1.1.0. Я тоже поставил версию с исправленной gtwin пользователям, пока замечаний нет, вроде все работает.



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