<< Пред.           стр. 12 (из 32)           След. >>

Список литературы по разделу

 Венгерский
 Голландский
 Бельгийский флемиш
 Бельгийский французский
 Австралийский английский
 Австрийский немецкий
 Новозеландский английский
 Международный французский
 Чешский
 Словацкий
 Польский
 Словенский
 Тайваньский китайский
 Гонконгский китайский
 Китайский
 Японский
 Тайский
 Африкаанс
 Албанский
 Амхарик
 Арабский
 Армянский
 Тагалог
 Белорусский
 Бенгальский
 Болгарский
 Бирманский
 Каталонский
 Хорватский
 Канадский английский
 Международный английский
 Южноафриканский английский
 Эстонский
 Фарси
 Канадский французский
 Галльский язык
 Грузинский
 Греческий
 Кипрский греческий
 Гуярати
 Еврейский
 
 ELangSwissGerman = 12 ELangPortuguese =13 ELangTurkish = 14 ELanglcelandic = 15 ELangRussian = 16 ELangHungarian = 17 ELangDutch = 18 ELangBelgianFlemish = 19 ELangBelgianFrench = 21 ELangAustralian = 20 ELangAustrian = 22 ELangNewZealand = 23 ELanglnternationalFrench = 24 ELangCzech = 25 ELangSlovak = 26 ELangPolish = 27 ELangSlovenian = 28 ELangTaiwanChinese = 29 ELangHongKongChinese = 30 ELangPrcChinese = 31 ELangJapanese = 32 ELangThai = 33 ELangAfrikaans = 34 ELangAlbanian = 35 ELangAmharic = 36 ELangArabic = 37 ELangArmenian = 38 ELangTagalog = 39 ELangBelarussian = 40 ELangBengali = 41 ELangBulgarian = 42 ELangBurmese = 43 ELangCatalan = 44 ELangCroatian = 45 ELangCanadianEnglish = 46 ELanglnternationalEnglish = 47 ELangSouthAfricanEnglish = 48 ELangEstonian = 49 ELangFarsi = 50 ELangCanadianFrench = 51 ELangScotsGaelic = 52 ELangGeorgian = 53 ELangGreek = 54 ELangCyprusGreek = 55 ELangGujarati = 56 ELangHebrew = 57
 
 Таблица 8.1. Коды языков (продолжение)
 
 Языки
 
 Коды
 
 
 
 Хинди
 Индонезийский
 Ирландский
 Швейцарский итальянский
 Канадский
 Казахский
 Кхмерский
 Корейский
 Лаосский
 Латвийский
 Литовский
 Македонский
 Малайский
 Мал ялам
 Маратхи
 Молдавский
 Монгольский
 Норвежский
 Бразильский португальский
 Пенджабский
 Румынский
 Сербский
 Сенегал
 Сомали
 Международный испанский
 Латиноамериканский испанский
 Суахили
 Шведский финский
 Зарезервирован для будущего
 использования
 Тамильский
 Телугу
 Тибетский
 Тигриния
 Кипрский турецкий
 Туркменский
 Украинский
 Урду
 Зарезервирован для будущего
 использования
 Вьетнамский
 Уэльский
 Зулу
 Для других языков
 
 ELangHindi = 58 ELanglndonesian = 59 ELanglrish = 60 ELangSwissltalian = 61 ELangKannada = 62 ELang Kazakh = 63 ELangKhmer = 64 ELang Korean = 65 ELangLao = 66 ELang Latvian = 67 ELangLithuanian = 68 ELangMacedonian = 69 ELangMalay = 70 ELangMalayalam = 71, ELangMarathi = 72 ELangMoldavian = 73 ELangMongolian = 74 ELangNorwegianNynorsk = 75 ELangBrazilianPortuguese = 76 ELangPunjabi = 77 ELangRomanian = 78 ELangSerbian = 79 ELangSinhalese = 80 ELangSomali = 81 ELanglnternationalSpanish = 82 ELangLatinAmericanSpanish = 83 ELangSwahili = 84 ELangFinlandSwedish = 85 ELangReservedi =86
 ELangTamil = 87 ELangTelugu = 88 ELangTibetan = 89 ELangTigrinya = 90 ELangCyprusTurkish = 91 ELangTurkmen = 92
 ELangllkrainian = 93
 ELangUrdu = 94 ELangReserved2 = 95
 ELangVietnamese = 96 ELangWelsh = 97 ELangZulu = 98 ELangOther = 99
 
  Зная коды, можно очень легко локализовать программу. Для этого в всем используемым в программе командам, текстовым сообщениям и строкам надо за-
 
 дать идентификаторы или ключевые слова. То есть назначить замену названий на определенную аббревиатуру. Например, вместо слова Exit можно использовать LANG_MENU_EXIT. После того, как вы замените весь текст в программе на макросы, в приложении создаются файлы с расширениями *.Н6 (русский язык), *.140 (белорусский язык), *.193 (украинский язык) и так далее. Ровно столько, сколько языков вы пожелаете поддерживать в своей программе. В каждом файле вы перечисляете все макросы, применяемые для замены текста, и около каждого макроса прописываете название команды или текст на поддерживаемых языках. Если это файл *.101, то перечисленные макросы должны быть описаны на английском языке, а если это *.И6, то на русском и так далее. Например, это может выглядеть так:
 //*******************************************************
 // файл Language.116
 // локализация приложения
 //*******************************************************
 // заголовок для языка
 #define ELanguage ELangRussian
 // команды меню
 ¦define LANG_MENU_CONFIRMATION "Подтверждение"
 #define LANG_MENU_INFORMATION "Информация"
 #define LANG_MENU_NOTES "Примечание"
 #define LANG_MENU_ERROR "Ошибка"
 ¦define LANG_MENU_WARNING "Предупреждение"
 #define LANG_MENU_EXIT "Выход"
 //*******************************************************
  В файле Language.116 локализованы команды программы MenuTest. Точно так же осуществляется локализация для любых языков, поддерживаемых Sym-bian OS. После этого создается файл с расширением *.1ос, например, MyLan-guage.loc, где подключаются все имеющиеся файлы локализации программы, например:
 //******************************************************* // файл MyLanguage.loc
 in
 II английский язык #ifdef LANGUAGE_01 ¦include "Language.101"
 
 #endif
 // французский язык #ifdef LANGUAGE_02 #include "Language.102" #endif
 // немецкий язык #ifdef LANGUAGE_03 #include "Language.103" #endif
 // русский язык #ifdef LANGUAGE_16 ¦include "Language.116" #endif
 // белорусский язык #ifdef LANGUAGE_40 ¦include "Language.140" #endif
 // украинский язык #ifdef LANGUAGE_93 #include "Language.193" tendif
  Все созданные файлы помещаются в каталог приложения, обычно в папку \inc, но принципиального значения это не имеет. Чтобы программа увидела все ваши старания по локализации, в файлах *.rss, *_caption.rss и *.aif, подключается файл спецификации, который описывает использование файлов локализации; в нашем примере это My Language, loc и системный файл avkon.loc. ¦include "MyLanguage.loc"
  И последнее действие заключается в декларировании используемых языков для локализации программы в файле ММР. Например, если вы в локализации применяете английский, французский, немецкий, русский, белорусский и украинский языки, то в файле ММР после ключевого слова LANG должны быть перечислены числовые значения для каждого языка. LANG 01 02 03 16 40 93
  Коды пишутся через пробелы, без каких-либо знаков препинания и так для всех языков локализации. В файле PKG вашего проекта тоже должно присутствовать обозначение языков в виде простой отдельной строки с кодами языков, например:
 
 01 02 03 16 40 93
  После того как вы создадите SIS-архив для работы на телефоне в момент его установки, инсталляционная система Symbian OS определит по кодам имеющиеся файлы локализации и предложит пользователю выбрать язык для интерфейса программы. Единственная проблема, возникающая с файлами локализации, это работа на эмуляторах телефонов. К сожалению, не всегда локализованные программы функционируют правильно. В SDK серии 60 в папке Example находится программа Language, иллюстрирующая процесс локализации программ. На основе полученной информации вам не составит труда разобраться с приложением самостоятельно.
 8.6. Получение данных от пользователя
  Создавая меню в программе MenuTest, для обработки команд полученных от пользователя была задействована функция HandleCommandL (). Эта функция позволяет обрабатывать команды для меню или диалогов, которые были назначены для двух подэкранных клавиш телефона. Основополагающий принцип работы этой функции заключается в использовании оператора switch для перебора имеющихся вариантов в обработке событий, полученных от пользователя. Функция HandleCommandL () имеет ограниченный диапазон работы и предназначена для работы с меню, диалогами с помощью двух подэкранных клавиш телефона. В системной библиотеке Symbian OS существует еще ряд функций, призванных упростить процесс обработки событий, полученных с различных клавиш телефона. Вот основные из них:
 Q CCoeAppUi: :HandleKeyEventL () - обрабатывает события, полученные с клавиш телефона от пользователя;
 Q CCoeAppUi: :HandleForegroundEventL () - функция предназначена для обработки команды находящейся в фокусе курсора;
 ? CCoeAppUi: :HandleSystemEventL () - обрабатывает системные со
 бытия, сгенерированные сервером окна (Window Server);
 Q CCoeAppUi::HandleApplicationSpecificEventL() - необходима для обработки специфических событий приложения;
 ? CCoeControl: :Of ferKeyEventL () - обработка событий с клавиш те
 лефона при помощи ключевых кодов.
  В заголовочных файлах e32keys.h и Uikon.hrh находится большинство ключевых кодов для работы с вышеперечисленными функциями. Например, при использовании функции CCoeControl: : Of ferKeyEventL () можно создать такую конструкцию кода обрабатывающую нажатие клавиш телефона.
 TKeyResponse CMyTestControl::OfferKeyEventL( const TKeyEventS aKeyEvent, TEventCode aType)
 {
 // узнаем, нажата любая клавиша или нет
 if (aType == EEventKey)
 
 // одна из клавиш нажата, значит, получаем код if (aKeyEvent.iCode)
 {
 case EKeyDownArrow: // вниз
 // действия на нажатую клавишу
 return EKeyWasConsumed;
 case EKeyUppArrow: // вверх // действия на нажатую клавишу return EKeyWasConsumed;
 case EKeyLeftArrow: // влево // действия на нажатую клавишу return EKeyWasConsumed;
 case EKeyRightArrow: // вправо // действия на нажатую клавишу return EKeyWasConsumed;
 default:
 return EKeyWasConsumed;
 return EKeyWasConsumed;
  В справочной системе SDK серии 60 в разделе C++ API Reference Ю Window Server существует перечисляемый тип TKeyCode, где представлены все ключевые коды для клавиш телефона.
 8.7. Списки
  Одним из основных элементов пользовательского интерфейса являются списки. Список - это перечисление определенных команд, опций, текста, перемещаясь по которым пользователь в праве выбирать один или несколько компонентов в зависимости от вида списка.
  В Symbian OS существуют три вида списков: Grid (Сетка), Vertical List (Вертикальный список) и Setting List (Список настроек). В каждом из них имеются дополнительные разновидности списков.
  Все списки формируются примерно одинаково. Чтобы создать список в программе, необходимо сначала обратиться к файлам ресурсов приложения и задекларировать объявления списка, примерно так, как мы делали это для меню, но со своей спецификой. Затем в исходном коде программы описать код для создания класса списка и обработки программ.
 
 8.7.1. Вертикальный список
  Вертикальный вид списка (Vertical List) располагается на экране телефона вертикально строка за строкой. Посмотрите на рис. 8.5, где изображен вертикальный вид списка.
 
 
 
 
 
 
 Рис. 8.5. Вертикальный список
  При переходе на страницу со списком курсор всегда выделяет самую первую верхнюю строку вне зависимости от нумерации. На рис. 8.5. это хорошо видно. В качестве строки списка может выступать как команда, так и просто строка текста или же набор опций, которые и составляют компоненты списка. Выбрать один из компонентов списка можно, выделив его курсором и нажав клавишу ОК, либо открыв меню и выбрав соответствующую команду для этого компонента списка.
  Вертикальный список делится на четыре разновидности списков: Selection List, Menu List, Markable List и Multiselection List.
 Список Selection
  Это простейшая разновидность списка. В списке Selection на экране отображаются построчно компоненты списка, и пользователь может выбирать из предложенных ему данных. После выбора одного из элементов списка и выполнения команды, открывающей данный компонент, как правило, происходит переход на новый экран с определенными данными для этого элемента списка.
 Список Menu
  Список Menu формируется на основании простого списка Selection, но для подэкранной клавиши Options создается дополнительное меню, через которое пользователь выполняет заданную команду для выбранного элемента списка.
 Список Markable
  Эта разновидность списка тоже построена на основе простого списка Selection, но с возможностью маркировки одного или более элементов списка. Посмотрите на рис. 8.6, где изображен список Markable.
 
 
 
 
 
 
 Рис. 8.6. Список Markable
  Выбрав один из компонентов списка Markable, с правой стороны от названия элемента появляется графическое изображение в виде галочки, которая сигнализирует о маркированном элементе списка. Маркировка компонента осуществляется с помощью стандартных команд меню: Mark (Отметить), Mark All (Отметить все), Unmark (Снять) или Unmark All (Снять все).
 Список Multiselection
  Список Multiselection очень похож на список Markable и формируется точно таким же образом, но графический элемент, сигнализирующий об отмеченном или снятом элементе списка, находится с левой стороны от названия компонента. Это квадратик небольшого размера с галочкой внутри (если элемент списка выбран). На рис. 8.7 показан список Multiselection. Маркировка списка происходит аналогичным образом, как и в списке Markable.
 
 
 
 
 
 Рис. 8.7. Список Multiselection
 Создание списка
  Для того чтобы создать вертикальный список, в файле ресурса вашего проекта *.rss делается объявление:
 
 RESOURCE LISTBOX r_list_vertical {
 array_id = r_list_string;
  flags = EAknListBoxSelection; }
  Перечисление array_id содержит массив текстовых строк типа LBUF, которые определены как компоненты или элементы всего списка. В своем файле ресурса вы должны описать r_list_string, создав необходимое количество текстовых строк в списке.
  Флаг flags в вертикальном списке декларирует разновидность создаваемого списка, а это четыре перечисленных ранее списка. Для каждой разновидности вертикального списка задан собственный флаг:
 ? Selection List - EAknListBoxSelectionList;
 ? Menu List - EAknListBoxMenuList;
 ? Markable - EAknListBoxMarkableList;
 ? Multiselection - EAknListBoxMultiselectionList.
  Затем в программе создаются дополнительные классы для формирования вертикального списка. Демонстрационный пример, иллюстрирующий работу со списками, будет рассмотрен в конце главы.
  Один из дополнительных классов в программе создается специально для того, чтобы определить стиль создаваемого вертикального списка. Посмотрите на рис. 8.5, где показаны два вертикальных списка, но с абсолютно разным оформлением. В системной библиотеке Avkon определено двенадцать классов для оформления стилей вертикальных списков. Создавая свой класс, наследующий возможности одного из системных классов, вы тем самым выбираете оформление для списка. Поскольку существует двенадцать классов, им соответствуют и двенадцать видов оформления. Принцип, по которому оформляются списки, имеет свои определенные закономерности. Посмотрите на рис. 8.8, где схематично показан шаблон для оформления списков.
 
 Рис. 8.8. Оформление списков
  Если внимательно посмотреть на рис. 8.5, где изображены два списка с различным оформлением, то вы заметите вертикальную линию, разделяющую экран на две части. С правой стороны расположен текст и метка (Label) элемента списка, как показано на рис. 8.8. Вторая часть экрана для каждого списка содержит
 
 две колонки. Нумерация, где проставляются числа, определяющие порядок элементов списка, либо загружается графическое изображение. Заголовок может содержать короткое дополнительное название для одного из элементов. В некоторых системных классах и заголовок, и нумерация интегрируются в один столбик. Для того чтобы задать текст элементу списка, используется следующая конструкция: "l\tHead\tLabel"
 ? число "1" - нумерация для элемента списка;
 ? \t - непечатаемый символ, разделяющий между собой колонки;
 ? Header - заголовок для элемента списка, находится в левой части экрана;
 ? Label - это основной текст, располагается в правой и большей части экрана.
  Теперь давайте рассмотрим все двенадцать системных классов Avkon, с помощью которых создается оформление для вертикального списка.
 ? CAknSingleStyleListBox содержит только текст в области метки, оп
 ределяется по типу "\tLabel".
 ? CAknSingleGraphicsStyleListBox - в колонках нумерации и заго
 ловка загружается иконка размером 13x13 пикселей, а область метки со
 держит текст. Определяется по типу " 1 \ tLabe 1".
 ? CAknSingleNumberStyleListBox - в колонках нумерации и заголовка
 загружается числовое значение для нумерации элементов списка. Область
 метки содержит текст и определяется по типу " 1 \ tLabel".
 ? CAknSingleHeadingStyleListBox - в двух колонках нумерации и за
 головка находится один заголовок, а в области метки - текст. Элемент
 списка задается: "\Head\tLabel".
 ? CAknSingleGraphicsHeadingStyleBox - в колонку нумерации загру
 жается иконка 13x13 пикселей, в заголовок - содержание заголовка и в
 метку - строка текста. Задается как "O\tHead\tLabel".
 ? CAknSingleLargeStyleListBox - в нумерацию и заголовок загружа
 ется иконка размером 42x29 пикселей, метка содержит строку текста. Оп
 ределяется "l\tLabel".
 ? CAknSingleNumberHeadingStyleListBox - нумерованный элемент
 списка с заголовком, заданный по типу "l\tHead\tLabel".
 Q CAknDoubleStyleListBox - этот стиль оформления списка содержит две строки текста - одна под другой для каждого элемента списка. Задается "\tLabell\tLabel2".
 ? CAknDoubleStyle2ListBox - оформление элемента списка происхо
 дит как при использовании предыдущего класса, но с большим по размеру
 шрифтом текста.
 ? CAknDoubleNumberStyleListBox оформляется как же, как и класс
 CAknDoubleStyleListBox, но дополнительно содержит нумерацию
 элементов списка. Задается "l\tLabell\tLabel2".
 U CAknDoubleTimeStyleListBox оформляется как предыдущий элемент списка, но вместо нумерации содержит время. Задается "08.00\tAM (илиРМ)\tLabell\tLabel2".
 
 О CAknDoubleLargeStyleListBox использует точно такой же стиль оформления, но вместо времени загружается иконка размером 42x36 пикселей. Определяется по типу "l\tLabell\tLabel2".
 8.7.2. Список Grid
  Английское слово Grid обозначает сетку, нечто подобное используется при создании этого вида списка. При создании списка Grid в клиентской области экрана формируется набор графических элементов в виде квадратов, равномерно распределенных по всей области экрана, как, например, простой календарь на месяц. Перемещаться по такому виду списка можно с помощью джойстика или клавиш Up, Down, Left и Right. Когда один из элементов списка находится в фокусе курсора, пользователь нажимает клавишу ОК или с помощью меню выполняет
 
 команду, это приводит к заданным действиям. Так же как и вертикальный список, Grid имеет четыре разновидности:
 D Selection List - флаг EAknListBoxSelecti-onGrid;
 ? Menu List - флаг EAknListBoxMenuGrid;
 ? Markable List- флаг EAknListBoxMarkab-
 leGrid;
 ? Multiselection List- флаг EAknListBoxMarkab-
 leGrid.
 
  Для оформления стиля списка Grid задействуются три системных класса уровня Avkon.
  Класс CAknCaleMonthlyStyleGrid создает список в виде календаря. Класс CAknPinbStyleGrid формирует список по принципу программы Актив, как на рис. 8.8. Класс CAknGMSStyleGrid создает список в виде сетки из графических иконок. На рис. 8.9 изображены все три стиля оформления для списка Grid.
  Чтобы создать список вида Grid, в файле ресурса приложения *.rss необходимо описать вид и стиль создаваемого списка Grid, например:
 
 RESOURCE GRID r_grid_list
 {
 array_id = r_grid_string;
 flags = EAknListBoxMarkableGrid;
  style = r_grid_style; }
 Рис. 8.9. Стили оформления списка Grid
 
  Первые два параметра имеют аналогичные свойства, как и при создании вертикального списка. Параметр style задает, как на экране будут представлены элементы списка Grid. И еще необходимо описать созданный ресурс r_grid_style, например, следующим образом:
 RECOURSE GRID_STYLE r_grid_style
 {
 primaryscroll = EAknGridFollowsItemsAnLoops; secondaryscroll = EAknGridFollowsItemsAnLoops; layoutflags = EAknGridHorizontalOrientation|
 EAknGridLeftTopRight|
  EAknGridTopTopBottom; itemsinprimaryorient = 3; itemsinsecondaryorient = 4; gapwith = 4; gapheight = 4; height = 45; width = 45;
 ? primaryscroll определяет способ горизонтальной навигации по эле
 ментам списка;
 ? secondaryscroll - вертикальная навигация по списку Grid;
 О layoutflags - это флаги, на основании которых происходит построение элементов списка Grid. Например, в представленном примере построение происходит горизонтально, то есть построчно. Построение так же происходит слева на право от верхнего правого угла списка Grid;
 ? itemsinprimaryorient - число элементов списка по горизонтали;
 ? itemsinsecondaryorient - число элементов списка по вертикали;
 О gapwith и gapheight - расстояние в пикселях между элементами списка, то есть между иконками;
 ? height и width - высота и ширина загружаемой иконки элемента списка.
 8.7.3. Список Setting
  На основании списка Setting в программе создается механизм настроек опций или конфигураций для приложения. Список вида Setting имеет вложение в виде дополнительного экрана, где и происходит настройка конфигурации для программы. Выбрав один из элементов списка Setting, пользователь попадает в дополнительное окно, где может произвести определенные опции. Посмотрите на рис. 8.10, где изображен список вида Setting.
  На рис. 8.10 происходит настройка точки доступа в Интернет по каналу GPRS. Выбрав из списка Setting компонент Канал данных, вы попадете на экран с возможностью выбора канала данных из списка. То есть существует титульная
 
 
 
 
 
 

<< Пред.           стр. 12 (из 32)           След. >>

Список литературы по разделу