категории | 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

#18   a-vasilenko    

Не работает ссылка на готовый \"Джойстик с qwerty - мод для Virtual Key Board\" sad


0 ответить

#18   sotamaster    

Присоединяюсь к Myrtus
А есть у кого готовый настроечный файлы для 5800 я разобраться не могу.
а делаю я скин от того что в Handy shell большой косяк-нету виртуальной клавы для поиска контактов или приложения.

в файле KeyCodeDef.ini
сказано что
KeyText = 1 - это текст, который будет написан на клавише виртуальной клавиатуры.
но что-то я не нашёл этого слова
у меня версия 0.9.4 VK


0 ответить

#18   kazus-factor    

Присоединяюсь к Myrtus...можно в личку...плиз.


0 ответить

#18   Myrtus    

А есть у кого готовый настроечный файлы для 5800 я разобраться не могу.


0 ответить

#18   zhen1394    

а как сделать скин, чтобы клавиатура была прозрачной в vbag?


0 ответить

#18   Total-st    

Много нового узнал для себя, спасибо !


0 ответить

#18   JuwGeda    

nca, ну напр. используя Nokmote можно будет через аксель набирать тексты, а то пальцы уже пухнут tongue


0 ответить

#18   molosar    

BADOLLA, в моей теме о проге есть огромная таблица цветов Virtual Key Board 5th, читаем шапку.


0 ответить

#18   BADOLLA    

molosar, читалась только где найти \"цвет фона клавиш и самого поля шестнадцатиричном формате.\"
-------------
Добавлено в 00.40: уже нащел.
кому интересно:
0xFFFF0000 красный цвет
0xFF0000FF синий
0xFF000000 черный
0xFFFF00FF розовый
0xFF00C000 зеленый
0xFFFFFF00 желтый
0xFFFFFFFF белый
0x00000000 - нет цвета, полная прозрачность


0 ответить

#18   nca    

Mike1808, а зачем на не сенсорный смарт виртуальная клавиатура?


0 ответить

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