TLanguages ​​в C + + Builder (исходники), Різне, Програмування, статті

Модуль Sysutils.hpp багатий на різні корисні та зручні функції і класи. Цей модуль, мабуть, одна з найбільш вдалих Borland і корисних у роботі програміста на C + + Builder речей. Однак, як показує досвід спілкування з розробниками, багатьом з них відомо в цьому модулі далеко не все. Так давайте заповнимо прогалини і розглянемо маловідомий клас TLanguages.


Говорячи відверто, даний клас може стати в нагоді в роботі аж ніяк не всім (якщо не сказати, трохи) розробникам, що, однак, ніяк не суперечить тому, що про це класі треба знати, благо це знання не обтяжить.


Клас TLanguages ​​призначений для отримання списку локалей, доступних в системі. Відразу слід зазначити, що “локаль” (locale) і “розкладка клавіатури” (keyboard layout) – речі різні і не взаємозамінні. Поняття “локаль” ширше поняття “розкладка клавіатури”, і включає в себе власне розкладку клавіатури, а так же, крім неї, настройки дати, часу, десяткового роздільника, грошового знака і ще ряд інших спеціальних параметрів. Так от, TLanguages ​​отримує саме список доступних локалей. Дана інформація береться безпосередньо з операційної системи.


TLanguages ​​успадкований безпосередньо від TObject і має такі властивості:



Властивість Count являє собою кількість доступних локалей.


Властивість Ext являє собою індексовані властивість для отримання стандартного трибуквенне розширення для локалі. Для англійської мови (американського), наприклад, розширення буде являти собою поєднання “ENU”, для російського “RUS”, для італійського “ITA”, і так далі …


Властивість ID являє собою індексовані властивість для отримання ідентифікатора локалі у вигляді рядка.


Властивість LocaleID являє собою індексовані властивість для отримання ідентифікатора локалі у вигляді цілого числа.


Властивість Name – Це, знову ж таки, індексовані властивість, що повертає стандартне ім’я Windows для локалі.


Властивості NameFromLCID і NameFromLocaleID менш корисні, але теж цікаві. NameFromLCID призначено для отримання імені локалі по строковому поданням її ідентифікатора (це те, що ми отримуємо, читаючи властивість ID). NameFromLocaleID – робить те ж, що і NameFromLCID, але для числового ідентифікатора локалі (це те, що ми отримуємо, читаючи властивість LocaleID).


Зверніть увагу, що всі властивості класу TLanguages ​​мають доступ тільки для читання (read-only). Так само зверніть увагу. Що всі властивості, за винятком NameFromLCID і NameFromLocaleID, є індексованими.


Тепер про методи. За винятком конструктора і деструктора, у TLanguages ​​всього лише один метод: IndexOf. Він повертає індекс локалі по її ідентифікатором. Тобто, припустимо, що італійська локаль перерахована третьою в TLanguages. Тоді виклик:






IndexOf(0x0410)

поверне 2. (Індексація починається з нуля, про це не забуваємо).


При незнаходження локалі із зазначеним числовим ідентифікатором метод IndexOf поверне -1.


Перед, власне. написанням коду залишилося сказати останнє: немає необхідності створювати екземпляр TLanguages ​​через оператор new. Для цього є спеціальна функція, Languages ​​(), також оголошена в Sysutils.hpp і повертає покажчик на об’єкт TLanguages.


Тепер спробуємо застосувати отримані знання на практиці. Створіть тестовий проект в C + + Builder прімрно наступного вигляду:




Рисунок 1. Тестовий проект для TLanguages.


Запустіть проект і натисніть кнопку “Старт”. Ось те, що у вас повинно вийти:




Рисунок 2. Запущений проект.


Тепер розберемося, як це зроблено. Обробник події OnClick кнопки StartButton являє собою наступне:






//—————————————————————————
void __fastcall TMainForm::StartButtonClick(TObject *Sender)
{
TListItem *NewListItem;
LocaleListView->Items->Clear();
for(int i = 0; i < Languages()->Count; i++)
{
NewListItem = LocaleListView->Items->Add();
NewListItem->Caption = Languages()->Ext[i];
NewListItem->SubItems->Add(Languages()->ID[i]);
NewListItem->SubItems->Add(Languages()->LocaleID[i]);
NewListItem->SubItems->Add(Languages()->Name[i]);
}
LocaleCountLabel-> Caption = “Всього доступних локалей:” + IntToStr (Languages ​​() -> Count);
}
//—————————————————————————

Для виведення інформації про локалях ми використовуємо TreeView як найбільш підходящий для цієї мети компонент. І в циклі






for(int i = 0; i < Languages()->Count; i++)

додаємо в список новий елемент, в який, в свою чергу, додаємо всю інформацію про локалях.


Рядок






NewListItem = LocaleListView->Items->Add();

додає новий елемент в TreeView.


Рядок






NewListItem->Caption = Languages()->Ext[i];

формує вміст колонки “Ext” в TreeView: заносить в новий елемент списку трибуквенне розширення локалі.


Рядок






NewListItem->SubItems->Add(Languages()->ID[i]);

формує вміст колонки “ID” в TreeView: заносить в новий елемент списку рядковий ідентифікатор локалі.


Рядок






NewListItem->SubItems->Add(Languages()->LocaleID[i]);

формує вміст колонки “LocaleID” в TreeView: заносить в новий елемент списку числовий ідентифікатор локалі. Зверніть увагу, що строковий ідентифікатор представлений в шістнадцятковому вигляді, а числовий – В десятковому. Для подання числового ідентифікатора також в шістнадцятковому вигляді рядок






NewListItem->SubItems->Add(Languages()->LocaleID[i]);

треба замінити на






NewListItem->SubItems->Add(IntToHex(int(Languages()->LocaleID[i]), 4));

І, нарешті, останній рядок в циклі






NewListItem->SubItems->Add(Languages()->Name[i]);

заповнює четверту колонку, “Name”, назвою даної локалі, заносячи дану назву в новий елемент списку.


Ось, власне, і все, що треба знати про клас TLanguages. Як то кажуть: “простенько, і зі смаком”, бо нема чого винаходити велосипед там, де він вже винайдений раніше. Тепер, принаймні, коли вам знадобиться отримати список локалей і коротку інформацію про них, ви зробите це за кілька хвилин.


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*