Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.07;
Скачать: CL | DM;

Вниз

MultiLanguages   Найти похожие ветки 

 
well_wisher ©   (2002-09-26 22:34) [0]

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


 
NailS ©   (2002-09-27 11:27) [1]

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


 
well_wisher ©   (2002-09-27 13:19) [2]

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


 
NailS ©   (2002-09-27 13:51) [3]

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


 
well_wisher ©   (2002-09-27 14:45) [4]

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


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

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


 
NailS ©   (2002-09-27 15:01) [6]

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


 
well_wisher ©   (2002-09-27 15:07) [7]

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:27) [8]

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


 
well_wisher ©   (2002-09-27 15:54) [9]

Вод код все работатет... Всем спасибо.
(функция 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.



Страницы: 1 вся ветка

Текущий архив: 2002.10.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
1-21123
Gerr
2002-09-21 19:53
2002.10.07
Открытие окна Delphi


14-21224
Rule
2002-09-11 10:30
2002.10.07
Поздравляю всех с наступающим профессиональным праздником !!!!!


3-20884
_Vlad_
2002-09-16 12:45
2002.10.07
работа с *.dbf *.dbt из Delphi без BDE


7-21294
sergn
2002-07-27 11:54
2002.10.07
Как перехватить событие открытия лотка CD-привода?


1-20992
Александр Шевченко
2002-09-26 17:49
2002.10.07
Как сделать отчет на основе массива?