Практическое занятие № 12

Тема: "Создание программ с интерфейсом на разных языках"

Цель работы: получить практические навыки по созданию мультиязычных интерфейсов программ.

 

Ход работы

Создать форму вида:

 

 

Для всех элементов присвойте произвольные тексты всплывающих подсказок.

 

Указания: для формы задайте свойства: BorderStyle=bsDialog, Caption=Пример формы, Position=poDesktopCenter.

На форму нанесите два компонента Label (Standard), в свойстве Caption укажите текст: "Первое поле" и "Второе поле".

На форму нанесите два компонента Edit (Standard) и очистите свойство Text.

На форму нанесите компонент RadioGroup (Standard). В свойстве Caption введите текст "Вид расчетов", в свойстве Items введите названия переключателей, в свойстве ItemIndex введите 0 (номер первого переключателя, выбранного по умолчанию).

На форму нанесите компонент ComboBox (Standard). В свойстве Items введите названия строк списка: Русский, Украинский, Английский; в свойстве ItemIndex укажите значение 0 (первая строка будет выбрана по умолчанию).

На форму нанесите два компонента Button (Standard). Для кнопок в свойстве Caption укажите нужные названия.

Для всех компонентов в свойстве Hint укажите текст всплывающей подсказки и установите свойство ShowHint=True.

 

Для кнопки Расчеты написать код, который вычисляет значение, выбранное с помощью переключателя, и отображает ответ на форме Form2 вида:

 

 

При этом проверяется, чтобы все поля были заполнены. Перед расчетом выдается запрос на выполнение операции. Форма создается в памяти динамически.

 

 Указания: С помощью кнопки New Form создайте новую форму Form2. На форму нанесите компонент Label (Standard) и с помощью свойства Font задайте нужный формат текста.

Если форма будет создаваться динамически, то запретим ее создание при запуске проекта. Выполните команду Project - Options. На закладке Forms перенесите форму Form2 из списка Auto-Create Forms в список Available Forms.

При закрытии динамически созданная форма должна удаляться из памяти. Для этого в событии OnClose формы Form2 напишите код:

 

procedure Tform2.Formclose(Sender: Tobject; var Action: Tcloseaction);

begin

    Action:=caFree;

end;

 

 С помощью кнопки Forms перейдите на форму Form1 и для кнопки Расчеты введите код:

 

procedure Tform1.Button1Click(Sender: Tobject);

//опишем переменную для результата

var rez:real;

begin

 

    //если первое поле пустое

    if Edit1.Text='' then

    begin

        //ставим курсор в первое поле

        Edit1.SetFocus;

        //завершаем работу процедуры

        Exit;

    end;

 

    //если второе поле пустое

    if Edit2.Text='' then

    begin

        //ставим курсор во второе поле

        Edit2.SetFocus;

        //завершаем работу процедуры

        Exit;

    end;

 

    //выдаем запрос на выполнение расчетов

    //все константы помещены в функции pchar для будущего перевода

    //если на запрос пользователь ответил Да

    if Application.MessageBox(pchar('Рассчитать?'),

                              pchar('Подтвердите'),

                              mb_yesno+mb_iconquestion)=idyes then

    begin

        //анализируем какой переключатель выбран

        case RadioGroup1.ItemIndex of

            //если выбран первый переключатель

            //рассчитываем сумму

            0: rez:=strtofloat(Edit1.Text)+strtofloat(Edit2.Text);

            //если выбран второй переключатель

            //рассчитываем разность

            1: rez:=strtofloat(Edit1.Text)-strtofloat(Edit2.Text);

        end;

        //динамически создаем форму в памяти

        Form2:=TForm2.Create(nil);

        //отображаем созданную форму в модальном виде

        Form2.ShowModal;

        //обновляем на форме все компоненты

        Form2.Repaint;

        //в компоненте Label1 формы Form2 отображаем ответ

        Form2.Label1.Caption:='Ответ: '+floattostr(rez);

    end;

end;

 

Для кнопки Очистить написать код, который очищает текстовые поля. При этом выдается запрос на выполнение операции.

 

Указания. Для кнопки Очистить напишем код:

 

procedure Tform1.Button2Click(Sender: Tobject);

begin

    //выдаем запрос на выполнение очищения

    //все константы помещены в функции pchar для будущего перевода

    //если на запрос пользователь ответил Да

    if Application.MessageBox(pchar('Очистить?'),

                              pchar('Подтвердите'),

                              mb_yesno+mb_iconquestion)=idyes then

    begin

        //очищаем поля

        Edit1.Text:='';

        Edit2.Text:='';

    end;

end;

 

Выполните перевод форм.

 

Указания: Установите на компьютер библиотеку TsiLang

Нанесите на форму Form1 компонент siLang (siComponents) и в свойстве LangNames укажите произвольные названия языков интерфейса: Rus, Ukr, Eng.

 

Сначала выполните поиск текстовых констант для перевода. Для этого в контекстном меню компонента siLang выберите команду TranslateSource - Source. Появится окно со всеми найденными константами. Для их сохранности нажмите на кнопке Modify Source.

 

Для перевода формы выполните двойной щелчок на компоненте siLang. В появившемся окне в левой части поочередно выбирайте группу элементов, а в правой части в соответствующих колонках таблицы вводите переводы всех элементов программы.

По окончанию перевода закройте окно и подтвердите сохранение.

 

Повторите эти же действия для формы Form2.

 

Для списка на форме Form1 написать код, который переключает язык интерфейса при выборе нужного языка.

 

Указания: Для списка ComboBox1 в событии OnChange напишем код:

 

procedure Tform1.Combobox1Change(Sender: Tobject);

begin

    //включаем язык, номер которого совпадает с номером языки в списке

    siLang1.ActiveLanguage:=ComboBox1.ItemIndex+1;

end; 

 

Язык интерфейса формы Form2 также должен переключаться на тот язык, который выбран в списке на форме Form1.

 

Указания: В коде кнопки Расчет найдите фрагмент, который открывает вторую форму. Поcле команды Form2.Show; вставьте код:

 

Form2.siLang1.ActiveLanguage:=siLang1.ActiveLanguage;