Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MultiLanguages [D6]


well_wisher ©   (2002-09-26 22:34:00) 

Есть проблема.
Добавляем новый язык в проект(Project->Languages->Add), переводим что надо, компилим. Кроме прочего, создается файл, скажем, Project1.ENG. Запускаем - все ОК.
Но! Как только мы копируем exe-шник с этим файлом в другую папку, программа перестает находить Project1.ENG и использует дефолтный язык.
Вопрос:
1. Как задать программе, где искать этот файл?
2. Как подгрузить этот файл динамически, в процессе работы?


well_wisher   (2002-09-27 15:54:00) [1]

Вод код все работатет... Всем спасибо.
(функция ReinitializeForms такая же как в
{Delphi5_Directory}\Demos\Richedit\reinit.pas)
----------------------------------------------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
MainMenu1: TMainMenu;
Languages1: TMenuItem;
English1: TMenuItem;
Russia1: TMenuItem;
procedure English1Click(Sender: TObject);
procedure Russia1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses lang;

{$R *.dfm}

function SetResourceHInstance(NewInstance: Longint): Longint;
var
CurModule: PLibModule;
begin
CurModule := LibModuleList;
Result := 0;
while CurModule <> nil do
begin
if CurModule.Instance = HInstance then
begin
if CurModule.ResInstance <> CurModule.Instance then
FreeLibrary(CurModule.ResInstance);
CurModule.ResInstance := NewInstance;
Result := NewInstance;
Exit;
end;
CurModule := CurModule.Next;
end;
end;


procedure TForm1.English1Click(Sender: TObject);

var filename:array [0..255] of char;
NewInst: Longint;
begin
NewInst := LoadLibraryEx("Project1.enu", 0, LOAD_LIBRARY_AS_DATAFILE);
if NewInst <> 0 then
begin
SetResourceHInstance( NewInst);
ReinitializeForms
end
else messagebox(0,"Loadin resource Failed:(","error",MB_OK);
end;

procedure TForm1.Russia1Click(Sender: TObject);
var filename:array [0..255] of char;
NewInst: Longint;
begin
NewInst := LoadLibraryEx("Project1.rus", 0, LOAD_LIBRARY_AS_DATAFILE);
if NewInst <> 0 then
begin
SetResourceHInstance( NewInst);
ReinitializeForms
end
else messagebox(0,"Loadin resource Failed:(","error",MB_OK);
end;

end.


NailS   (2002-09-27 15:27:00) [2]

Полезно демки смотреть ;)))


well_wisher   (2002-09-27 15:07:00) [3]

procedure TForm1.Button1Click(Sender: TObject);
var filename:array [0..255] of char;
NewInst: Longint;
begin
NewInst := LoadLibraryEx("Project1.ENG", 0, LOAD_LIBRARY_AS_DATAFILE);
if NewInst <> 0 then
begin
SetResourceHInstance( NewInst);
ReinitializeForms
end
else messagebox(0,"Loadin resource Failed:(","error",MB_OK);
end;
функция ReinitializeForms такая же как в
{Delphi5_Directory}\Demos\Richedit\reinit.pas


NailS   (2002-09-27 15:01:00) [4]

Ну, вот и установка локали для конкретного приложения работает, просто путь прописал с ошибкой ;( вот и говорил что дескриптор неверный


NailS   (2002-09-27 14:58:00) [5]

Программно вроде никак, ИМХО, во всяком случае я не нашел.
При загрузке ресурсов приложение, написаное на дельфи сначала ищет в реестре не изменена ли локализация для данного приложения
т.е. пытается открыть один из ключей
HKEY_CURRENT_USER\Software\Borland\Locales
HKEY_LOCAL_MACHINE\Software\Borland\Locales
HKEY_CURRENT_USER\Software\Borland\Delphi\Locales
если удалось, то пытается считать строковый параметр, имя которого есть полное имя приложения (этот вариант у меня не прокатил, говорил дескриптор неверный),а значение этого параметра есть идентификатор локали RUS, ENU и т.д.
Если не удалось найти такой параметр, то читается идентификатор локали из параметра по умолчанию в данном ключе и загружаются соответствующие ресурсы (это у меня получилось)


well_wisher   (2002-09-27 14:45:00) [6]

Я это то понял... Но не доверяю такому решению... Меня интересует что то похожее как в примере \Demos\Richedit\


NailS   (2002-09-27 13:51:00) [7]

Насколько я понял из хелпа локализация в том и заключается чтобы определив локаль загрузить для нее соответствующие ресурсы.


well_wisher   (2002-09-27 13:19:00) [8]

Да но меня интересует другой способ... Как это все сделать програмно?


NailS   (2002-09-27 11:27:00) [9]

Панель управления - Языки и стандарты - Язык Английский(Великобритания)


Наверх

Титульная страница Поиск, карта сайта Написать письмо