Форум: "Основная";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c