Во исполнение идеи, кинутой PsevDANImом, закладываю первый камень в фундамент FAQа. Предлагаю в этой теме обсуждений/споров не вести. Если знаете полезную информацию - размещайте (желательно в формате "вопрос-ответ", но и просто советы типа "хозяйке на заметку" тоже приветствуются). Итак, поехали... Внимание! 1. Данное описание не является пошаговой инструкцией. 2. Ковыряние лангпаков требует хотя бы общих представлений об XML и HTML, а также фантазии и пытливого ума. 3. Все, что Вы делаете с лангпаком - Вы делаете на свой страх и риск. Все, что сделал для Вас кто-то другой, тоже сделано на Ваш страх и риск. Всю ответственность за последствия несет владелец устройства. Структура лангпаков периодически меняется, поэтому здесь описываются только весьма общие принципы его построения. Что такое Лангпак? Лангпак (LangPack) - это вопреки названию не только языковой пакет, позволяющий локализовать программу. Это весь ее графический интерфейс и даже структура меню. В обсуждениях встречаются обозначения Лангпак, LangPack, ЛП, LP, и скин. В папке с программой обычно находятся несколько лангпаков. Имена файлов имеют вид Langpack.rsr, Langpack320x240.rsr, Langpack800x480.rsr, и т.д. При запуске программа определяет разрешение экрана устройства и загружает соответствующий ЛП. Если подходящего расширения в наборе файлов нет, то используется файл Langpack.rsr. Это так называемый универсальный (или "резиновый") скин. В нем размеры всех элементов экрана заданы в процентах от размера экрана, поэтому он подходит к любому экрану (но для этого в нем максимально упрощена графика, а некоторые элементы могут быть искажены - растянуты по вертикали или горизонтали). Сам файл лангпака представляет собой обычный ZIP архив (с измененным расширением - RSR), соответственно его можно открыть Вашим любимым архиватором (WinRAR, WinZIP, TotalCommander). Внутри архива находятся следующие папки day, day_1.5x, day_2x и т.п. - в них изображения всех элементов интерфейса (кнопки, стрелки маневров и т.д.) разного разрешения - для разных экранов. eng, rus, ukr - в них лежат соответственно файлы eng.xml, rus.xml, ukr.xml. Это и есть в чистом виде языковые пакеты - в них задаются выводимые имена всех элементов (строк меню, надписей на кнопках, текстов запросов). poi24, ..., poi64 - папки со значками мест интереса разного размера (для разных уровней детализации). И наконец, папка general - главная. В ней три файла: dialogs.xml - Определяет структуру диалоговых окон (выводимые параметры, дополнительные кнопки и т.д.) general.xml - определяет структуру меню, быстрого меню и основного экрана навигации с навигационной панелью. В нем же находится список категорий мест интереса (POI) с указанием картинки, присвоенной каждой категории - блок <itemlist name="POI">, и список команд/меню, которые могут быть назначены на кнопки быстрого меню (моЁ меню) - блок <itemlist name="QM"> Списки структуры меню содержат набор пунктов для конкретного меню, например, меню "Поиск": <menu name="search" cols="2" rows="4"> <props title="@search_title" layout="template_2btns"/> <items> <item name="address" tip="@address" image="search_address" info="@address_info"/> <item name="bookmarks" tip="@sbookmarks" image="finish_favorites" info="@bookmarks_info"/> <item name="POI" tip="@POI" image="search_poi" info="@POI_info"/> <item name="last10" tip="@last10" image="search_last10" info="@last10_info"/> <item name="setcoords" tip="@setcoords" image="setcoords" info="@setcoords_info"/> <item name="highlight_off" tip="@highlight_off" image="highlight_off" info="@highlight_off_info"/> </items> </menu> Во-первых, из этого блока видно, что меню вызывается командой search и показывается в раскладке template_2btns (О том, что такое раскладка - см.ниже). Во-вторых, для каждого пункта видна соответствующая команда, надпись, картинка и комментарий. Например, для кнопки поиска по адресу используется текст @address. Это значит, что на кнопке будет написано значение переменной address из файла rus.xml (eng.xml, ukr.xml - в зависимости от выбранного языка) Мелким шрифтом будет написан комментарий (address_info из того же языкового файла) На кнопке будет картинка search_address. Переставляя местами строки, можно переставить кнопки в меню, а также удалить или добавить свои. layouts.xml - содержит "раскладки" - таблицы, представляющие собой расположение на экране различных элементов - карты, кнопок, указателей маршрута, текстовой и цифровой информации. Формат этого файла (точнее, отдельных его блоков) близок HTML таблицам. В layouts.xml можно особо отметить следующие блоки (каждый блок ограничен тегами <layout name="BlaBlaBla"> и </layout>): <layout name="template_np_drive_hor"> - Расположение информации на экране в режиме "Маршрут не задан" <layout name="template_buttons_drive_hor"> - Расположение кнопок и других элементов управления в режиме "Маршрут не задан". Эти элементы показываются дополнительно к элементам <layout name="template_np_drive_hor"> <layout name="template_np_hor"> - Навигационная панель - показывается в режиме "Маршрут задан". В этом блоке находятся индикаторы маневров, расстояние до них и до финиша и т.д. <layout name="template_buttons_hor"> - Кнопки для режима "Маршрут задан". В зависимости от ЛП в нем могут быть еще блоки с похожими названиями, например <layout name="template_np_1_hor"> - для алтернативного вида навигационной панели, или <layout name="template_np_vert"> - для вертикального положения экрана. Блоки, определяющие вид меню, диалоговых окон, списков и Message-boxов. Например <layout name="template_SearchCoords_hor"> - шаблон экрана поиска точки по координатам, <layout name="template_messagebox_2btn_vert"> - всплывающее сообщение с двумя кнопками (Да и Нет) и прогресс-баром, и т.д. <palette name="default"> и <palette name="night">, содержащие стили оформления (клаcсы). В блоке <palette name="default"> содержатся также ссылки на изображения (кнопки, пиктограммы, элементы навигационной панели): <palette name="default"> <image name="compas_d"/> <image name="compas_n"/> ........ <class name="cMenu_btn_12key_red" valign="bottom" align="center" bgcolor="#FF0000" bgcolor2="#550000" alpha="160" border="2" bordercolor="#440000" roundrad="5" fontsize="11" textdecoration="B,S,W,R" textcolor="#ffffff" widetextbg="#440000"/> <class name="cMenu_btn_12key_red_sel" valign="bottom" align="center" bgcolor="#550000" bgcolor2="#FF0000" alpha="200" border="2" bordercolor="#440000" roundrad="5" fontsize="11" textdecoration="B,S,W,R" textcolor="#ffff00" widetextbg="#440000"/> .... Каждый класс - это стиль оформления, который может использоваться в раскладках для множества элементов (ячеек таблицы). Приведенный пример - красная кнопка для всплывающего сообщения Рассмотрим некоторые из возможных параметров класса: valign, align - выравнивание по вертикали (top, middle, bottom) и горизонтали (left, center, right) bgcolor - цвет фона в формате #RRGGBB, то есть #FF0000 = красный. Если используется и параметр bgcolor2, то фон будет градиентным от bgcolor до bgcolor2 (в данном случае, от красного до темно-красного). alpha - прозрачность (0-полностью прозрачный, 256 - непрозрачный) bgimagealpha - прозрачность вставленной картинки (0-полностью прозрачный, 256 - непрозрачный) border и bordercolor - толщина и цвет границы roundrad - радиус закругления углов fontsize и textcolor - размер и цвет текста textdecoration - оформление текста B - жирный I - наклонный U - подчеркнутый S - в одну строку (без переноса) W - с окантовкой букв R - автокоррекция размера шрифта (чтоб текст влез в поле) - если я не ошибаюсь! С - ??? widetextbg - цвет окантовки букв. Для кнопок в раскладке указан один класс (например, class="cMenu_btn_12key_red"), но когда она нажата, к ней применяется стиль "cMenu_btn_12key_red_sel", а если она недоступна (например, кнопка масштабирования, когда достигнут уже предельный масштаб) - то "cMenu_btn_12key_red_dis" В блоках <palette name="default"> и <palette name="night"> перечисляются одни и те же классы, но за счет применения разных цветов для фона и шрифтов можно создать ночную неослепляющую палитру. И последние блоки - это "палитрозависимые" картинки (то есть картинки, которые отличаются для дневного и ночного режима): <itemlist name="hor_day"> .... <item name="compas" val="@compas_d"/> .... </itemlist> <itemlist name="hor_night"> .... <item name="compas" val="@compas_n"/> </itemlist> Таким образом, в дневном режиме в качестве картинки "compas" используется картинка compas_d, а в ночном - compas_n Обе они перечислены в блоке <palette name="default"> <image name="compas_d"/> <image name="compas_n"/> .... Таким образом, в самой раскладке будет использоваться ссылка на "переменную картинку": <td width="58" bgimage="@compas" invoke="north_up"/> В заключение первого урока - несколько советов: 1. Не забывайте делать резервные копии. 2. Не ленитесь вставлять комментарии (блоки типа <!-- это комментарий -->), чтоб разобраться потом, чего наизменяли. 3. Не ленитесь пользоваться поиском по файлу. Чтобы найти, где в файле описана кнопка ДПОИ, может быть достаточно поискать по файлу строку ДПОИ или DPOI (особенно если автор следовал совету 2). 4. Не ленитесь показывать структуру вложенности блоков с помощью отступов - табуляций или пробелов. 5. Если не можете понять, за что отвечаеет какой-то класс (т.е. - шрифт какого элемента он определяет), попробуйте назначить ему идиотский цвет (например #FF00FF) и тестируйте программу во всех режимах, пока не найдете, где вылезает такой цвет. Сразу вставьте в файл комментарий. To be continued... Чем открыть лангпак? Какие программы нужны для редактирования скина? Langpack.rsr - это ZIP архив. Открыть его можно очти любым архиватором (WinZIP, WinRAR). Кроме того, большинство файл-менеджеров умеет открывать архивы как папки. Очень удобен Total Commander. Он распознает архив по внутреннему формату (без переименования в ZIP) и позволяет войти внутрь него простым нажатием Enter. Кроме того, при редактировании файлов внутри архива Total Commander создает временную копию файла, а при сохранении предлагает переупаковать файл в архив. Файлы XML можно редактировать любым тектовым редактором (Блокнота, AkelPad, Notepad+). Особенно удобно использовать редакторы с подсветкой синтаксиса. Для редактирования картинок можно использовать Photoshop, Corel PhotoPaint, но с этой задачей прекрасно справляется бесплатная программа GIMP После внесения изменений в скин на экране пропало все, кроме карты. Значит, в скине допущены ошибки структуры (например, какой-то блок открыт, но не закрыт). В папке logs в файле errors.log можно прочитать, в какой строке какого файла обнаружена ошибка