категории | RSS

Создание своей клавиатуры для Virtual Key Board.

В данной статье я хочу рассказать как сделать свою клавиатуру на примере QWERTY.

Настраивать клавиатуру можно при помощи трёх конфигурационных файлов, которые лежат в X:system/apps/WF_VirtualKey/skin/Default/:
KeyCodeDef.ini
RectDef.ini
Skin_01.ini

Определяем размеры.
Для начала я бы посоветовал набраться терпенья, взять в руки карандаш и прикинуть как будет выглядеть ваша клавиатура
на листке бумаги )). В качестве примера я возьму QWERTY-клавиатуру, которая будет содержать 50 клавиш.
Итак, если нарисовать её на бумаге, то мы увидим, что по горизонтали она содержит 10 клавиш, по вертикали - 5.
Каждая клавиша имеет свои координаты в общем поле, которые зависят от её размера. Разрешение экрана у Nokia 5800 360х640 пикселей, следовательно в ширину наша клавиатура для максимального удобства в портретной ориентации экрана должна быть 360 точек. Путём несложных математических вычеслений ширину клавиши принимаем 36 точек и если у нас клавиши будут квадратными, то размеры клавиатуры будут 360х180 пикселей. Открываем файл RectDef.ini и правим его следующим образом:

[WF_RECT_BackNormal]//Главное окно
Size = SIZE(360,180)
BackColor = 0x00000000
BorderTop = 1
BorderBottom = 1
BorderLeft = 1
BorderRight = 1
BorderColor = 0x409acd32
//--------------------
[WF_RECT_BackOnMove]//Окно при перетаскивании
Size = SIZE(360,180)
BackColor = 0x00000000
//--------------------
BorderTop = 2
BorderBottom = 2
BorderLeft = 2
BorderRight = 2
BorderColor = 0x909acd32
//--------------------
[WF_Rect_KeyNormal]//Клавиши
Size = SIZE(36,36)
BackColor = 0x00000000
//--------------------
BorderTop = 1
BorderBottom = 1
BorderLeft = 1
BorderRight = 1
BorderColor = 0x20324c00
//--------------------
[WF_Rect_KeyDown]//Клавиши при нажатии
Size = SIZE(36,36)
BackColor = 0x909acd32
BorderTop = 0
BorderBottom = 0
BorderLeft = 0
BorderRight = 0
BorderColor = 0x909acd32

где BackColor - это цвет фона клавиш и самого поля шестнадцатиричном формате.
BorderTop, BorderBottom, BorderLeft, BorderRight - толщина обводки в пикселях (указано наиболее оптимальное значение на мой взгляд).
BorderColor - цвет этой самой обводки шестнадцатиричном формате.
Сохраняем и закрываем.

Определяем координаты клавиш.
Начало координат - верхний левый угол, следовательно первая клавиша первой строки будет иметь координату (0,0), вторая (36,0), третья (72,0), ... десятая (324,0). Советую на листке, где рисовали клавиатуру, в каждом квадратике прописать эти координаты, чтобы в дальнейшем могли быстро их перенести в файл. Первая клавиша второй строки имеет координату (0,36), вторая (36,36), третья (72,36), ... десятая (324,36) и так все 5 строк. Последняя клавиша последней строки должна иметь координаты (324,144).

Вот примерная сетка координат:

. (0,0) (36,0) (72,0) (108,0) (144,0) (180,0) (216,0) (252,0) (288,0) (324,0)
(0,0)
(36,0)
(72,0)
(108,0)
(144,0)

Теперь надо определиться с клавишами, кто какие клавиши туда хочет засунуть пусть определяет сам, но желательно чтобы они были прописаны на листке в квадратиках рядом с координатами, чтобы не запутаться.
Далее открываем файл Skin_01.ini и указываем наш размер клавиатуры и размер шрифта (для нашего случая наиболее подходящий размер 22).

WindowSize = SIZE(360,180)
FontHeight = 22


Следующим блоком идёт настройка первой клавиши (для нашего случая пусть это будет клавиша с цифрой 1):

[Skin_Key]
Link_KeyCode = WF_1

//RECT_START
KeyRectPostion = POINT(0,0)
KeyText = 1
KeyTextAlign = ALIGN(50,35)
KeyTextColorNormal = 0x909acd32
KeyTextColorDown = 0x909acd32
Link_KeyRectNormal = WF_Rect_KeyNormal
Link_KeyRectDown = WF_Rect_KeyDown
Link_KeySkinNormal = NULL//Currently unsupported
Link_KeySkinDown = NULL//Currently unsupported
//RECT_END

Разберём по пунктам:
Link_KeyCode = WF_1 - ссылка на сканкод (кейкод) в файле KeyCodeDef.ini (о нём чуть позже). Называем его WF_(название клавиши).
KeyRectPostion = POINT(0,0) - координата клавиши, тут всё понятно.
KeyText = 1 - текст, который будет написан на клавише виртуальной клавиатуры.
KeyTextAlign = ALIGN(50,50) - координата текста внутри клавиши в процентах, (50,50) - считается ровно по центру, но учитывая особенности шрифта лучше написать (50,35).
KeyTextColorNormal = 0x909acd32 - цвет текста ненажатой клавиши в шестнацатеричном формате, где 0х9 - это уровень прозрачности (0х0 - полностью прозрачно)
KeyTextColorDown = 0x909acd32 - цвет текста нажатой клавиши.
Остальное оставляем как есть.

Переходим ко второму блоку и аналогично редактируем настройки второй клавиши:

Skin_Key]
Link_KeyCode = WF_2

//RECT_START
KeyRectPostion = POINT(36,0)
KeyText = 2
KeyTextAlign = ALIGN(50,35)
KeyTextColorNormal = 0x909acd32
KeyTextColorDown = 0x909acd32
Link_KeyRectNormal = WF_Rect_KeyNormal
Link_KeyRectDown = WF_Rect_KeyDown
Link_KeySkinNormal = NULL//Currently unsupported
Link_KeySkinDown = NULL//Currently unsupported
//RECT_END

Если приловчиться то с помощью копирования можно относительно быстро отредактировать все 50 клавиш )))

Эмуляция клавиш.
Теперь нас интересует файл KeyCodeDef.ini, тут содержаться данные о сканкодах и кейкодах всех клавиш нашей клавиатуры:

[WF_1]
KeyScanCode = 0x31
KeyCode = 0x31


Тут ничего сложного:
[WF_1] - это и есть тот пункт на который ссылается клавиша из файла Skin_01.ini, текст в квадратных скобках должен состоять из тех же символов которые указаны в Skin_01.ini, иначе работать ничего не будет.

KeyScanCode - сканкод клавиши в шестнадцатиричном виде, дописывается после 0x.
KeyCode - кейкод клавиши в шестнадцатиричном виде, тоже перед ним ставиться 0x. Есть одна оговорка, вместо кейкода можно вписать сканкод, на практике это срабатывает, но есть и исключения, например клавиша решетки, которой требуются оба кода.

Чтобы не запутаться в куче букв) советую размещать блоки с настройками клавиш в том порядке, в котором они расположены на клавиатуре и разделять строки например вот так //----строка 1-----, //----строка 1----- ...

Совет:
Чтобы сделать область за которую можно двигать клавиатуру, не нажимая кнопок, достаточно в файле RectDef.ini размер окна при перетаскивании изменить на чуть большее значение:

[WF_RECT_BackOnMove]
Size = SIZE(360,216)

А в файле Skin_01.ini изменить на то же значение параметр WindowSize:

WindowSize = SIZE(360,216)
Индивидуальный размер и цвет для каждой клавиши.

Для этого нам надо определить количество типоразмеров клавиш, т.е. сколько видов кнопок у нас будет.
Возьмём в качестве примера мой мод с "qwerty - джойстиком", где присутствуют 5 типоразмеров:

1. Цифры, буквы, клавиша Enter - 25x25 пикселей,
2. Левый и правый софт, зелёная, красная, вправо-влево, звёздочка, решетка - 100х50 пикселей,
3. Клавиша ОК - 100х100 пикселей,
4. Вверх-вниз - 50х100 пикселей,
5. Карандаш и С - 75х50 пикселей.

Незабываем задать каждой клавише свою координату, учитывая её размер, и всё это прописать в файле Skin_01.ini, как я писал ранее.

Теперь в файле RectDef.ini настраиваем параметры для каждого типа, начнём с первой, т.е клавиш с размером 25х25:

[WF_Rect_KeyNormal_1]//Клавиши
Size = SIZE(25,25)
BackColor = 0x600000FF
BorderTop = 1
BorderBottom = 1
BorderLeft = 1
BorderRight = 1
BorderColor = 0x00000000

//--------------------

[WF_Rect_KeyDown_1]//Клавиши при нажатии
Size = SIZE(25,25)
BackColor = 0x00000000
BorderTop = 0
BorderBottom = 0
BorderLeft = 0
BorderRight = 0
BorderColor = 0x900000FF

здесь нас интерисуют следующие пункты:
[WF_Rect_KeyNormal_1] , [WF_Rect_KeyDown_1] - идентификаторы клавиш в обычном и нажатом положениях, на которые ссылаются клавиши из файла Skin_01.ini.
Size - размер в пикселях,
BackColor - цвет фона клавиш в шестнадцатиричном формате
BorderColor - цвет обводки клавиши в шестнадцатиричном формате.

Для второго типа всё по аналогии, т.е меняем идентификатор, размер и цвет по желанию:

[WF_Rect_KeyNormal_2]
Size = SIZE(100,50)
BackColor = 0x609acd32
BorderTop = 1
BorderBottom = 1
BorderLeft = 1
BorderRight = 1
BorderColor = 0x00000000

//--------------------

[WF_Rect_KeyDown_2]//Клавиши при нажатии
Size = SIZE(100,50)
BackColor = 0x00000000
BorderTop = 0
BorderBottom = 0
BorderLeft = 0
BorderRight = 0
BorderColor = 0x909acd32

Так настраиваем все 5 типов.

Следующим этапом будет прописывание всех параметров в файле Skin_01.ini.

[Skin_Key]
Link_KeyCode = WF_1

KeyRectPostion = POINT(0,0)
KeyText = 1
KeyTextAlign = ALIGN(50,35)
KeyTextColorNormal = 0x90FFFFFF
KeyTextColorDown = 0x90FFFFFF
Link_KeyRectNormal = WF_Rect_KeyNormal_1
Link_KeyRectDown = WF_Rect_KeyDown_1
Link_KeySkinNormal = NULL
Link_KeySkinDown = NULL

Тут нас интерисуют следующие параметры:

Link_KeyRectNormal - ссылка на типоразмер клавиши в файле RectDef.ini, то есть указываем клавише как она

должна отображаться на клавиатуре в ненажатом положении.
Link_KeyRectDown - то же самое только в нажатом положении.

На этом редактирование закончено! smile

Результат можно посмотреть здесь:
Джойстик с qwerty - мод для Virtual Key Board
Удачных модов!

Первоисточник:
nca.touchnokia.ru

DimonVideo
2009-03-24T22:38:54Z

Здесь находятся
всего 0. За сутки здесь было 0 человек

Комментарии 18

#8   Mike1808    

А можно сделать так на н95 8гб с армянской клавой?


0 ответить

#8   molosar    

BADOLLA, в вообще статья читалась?


0 ответить

#8   BADOLLA    

как цвет поменять?


0 ответить

#8   nca    

Yo_11,
статья не об этом, я же не разработчик этой проги!


0 ответить

#8   Yo_11    

Это все хорошо ) Надо чтоб ползунок был для открытия и закрытия клавы (


0 ответить

#8   .typuct.    

Статью хорошо написал. Молодец. Ех да не лопнет обменник от модов


0 ответить

#8   I.L.S.I.O.    

Хорошая статья smile больше примеров бы, которые можно посмотреть wink


0 ответить

Яндекс.Метрика