Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  154

•  TDictionary Custom Sort  3 334

•  Fast Watermark Sources  3 085

•  3D Designer  4 844

•  Sik Screen Capture  3 337

•  Patch Maker  3 550

•  Айболит (remote control)  3 655

•  ListBox Drag & Drop  3 012

•  Доска для игры Реверси  81 679

•  Графические эффекты  3 939

•  Рисование по маске  3 245

•  Перетаскивание изображений  2 626

•  Canvas Drawing  2 748

•  Рисование Луны  2 576

•  Поворот изображения  2 185

•  Рисование стержней  2 168

•  Paint on Shape  1 568

•  Генератор кроссвордов  2 234

•  Головоломка Paletto  1 767

•  Теорема Монжа об окружностях  2 228

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 057

•  Игра HIP  1 282

•  Игра Go (Го)  1 230

•  Симулятор лифта  1 474

•  Программа укладки плитки  1 216

•  Генератор лабиринта  1 547

•  Проверка числового ввода  1 364

•  HEX View  1 497

•  Физический маятник  1 358

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Мультиязыковое приложение



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

Вместо использования директив времени выполнения для проверки текущего языка, для установки индекса сообщений в таблице строк и загрузки оттуда сообщений в зависимости от языка я использовал переменные времени выполнения. Для каждого языка вы можете создавать другие таблицы строк, затем компилируя их с соответствующими директивами компиляции.

Вот некоторый код, дающий представление об этом методе:


unit French1;

interface

uses

  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, IniFiles;

type

  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var

  Form1: TForm1;
  StringIndex: Integer;
implementation

{$R *.DFM}

{$R MULTLANG.RES}

{ Вот содержимое ресурсного файла для этого проекта:
1, "Attention"
2, "No Condition definition selected!"
3, "Always"
4, "Cannot delete the 'always' condition."
5, "Confirmation"
6, "Delete the condition?"
7, "Yes"
8, "No"
9, "Attention"
10, "Pas de condition Selectionnйe"
11, "Toulours"
12, "Ne peux effacer la condition 'Toujours'"
13, "Confirmation"
14, "Effacer cette condition?"
15, "&Oui"
16, "&Non"
}

procedure TForm1.FormActivate(Sender: TObject);
var

  {inifile : TIniFile; Опционально}
  ProgramLanguage: string;
begin

  { Устанавливаем французский язык }
  ProgramLanguage := 'fra';
  { Дополнительно вы можете получить текущий язык из Win.INI:}
  {inifile := TInifile.Create('WIN.INI');
  ProgramLanguage := inifile.ReadString('intl', 'sLanguage', 'enu');
  inifile.Free;}
  { Простите за то, что я привожу здесь несколько языков, указанные
  ниже находились в файле setup.inf моей операционной системы.

  dan = Danish
  nld = Dutch
  enu = English (American)
  eng = English (International)
  fin = Finnish
  fra = French
  frc = French Canadian
  deu = German
  isl = Icelandic
  ita = Italian
  nor = Norwegian
  ptg = Portuguese
  esp = Spanish
  esn = Spanish (Modern)
  sve = Swedish

  }

  if ProgramLanguage = 'enu' then
  begin
    StringIndex := 0;
  end
  else if ProgramLanguage = 'fra' then
  begin
    StringIndex := 8;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var

  i, j, k: integer;
  DialogForm: tform;
begin

  Application.NormalizeTopMosts;
  {No Condition definition selected!"}
  DialogForm := CreateMessageDialog(LoadStr(StringIndex + 2), mtWarning,
    [mbOK]);
  {Attention}
  DialogForm.caption := LoadStr(StringIndex + 1);
  DialogForm.showmodal;
  Application.RestoreTopMosts;
  {Cannot delete the 'always' condition.}
  DialogForm := CreateMessageDialog(LoadStr(StringIndex + 4), mtWarning,
    [mbOK]);
  {Always}
  DialogForm.caption := LoadStr(StringIndex + 3);
  DialogForm.showmodal;
  Application.RestoreTopMosts;
  {Delete the condition?}
  DialogForm := CreateMessageDialog(LoadStr(StringIndex + 6), mtInformation,
    [mbYes, mbNo]);
  {confirmation}
  DialogForm.caption := LoadStr(StringIndex + 5);
  for j := 0 to DialogForm.controlCount - 1 do
  begin
    if DialogForm.controls[j] is tButton then
      with tButton(DialogForm.controls[j]) do
      begin
        if caption = '&Yes' then
          caption := LoadStr(StringIndex + 7);
        if caption = '&No' then
          caption := LoadStr(StringIndex + 8);
      end;
  end;
  DialogForm.showmodal;
end;

end.





Похожие по теме исходники

Консольное DOS приложение




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте