Практическое занятие № 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;