Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-21204
Карелин Артем
2002-09-11 09:19
2002.10.07
Хочу написать статью по Екселю.


14-21192
VladD2
2002-09-10 20:44
2002.10.07
Темы для статей по Дельфи!


4-21347
MJH
2002-08-19 09:18
2002.10.07
смена скина XP


1-21076
Hogo
2002-09-24 14:48
2002.10.07
Убить процесс


1-21044
Dim!S
2002-09-27 12:58
2002.10.07
Текстовые файлы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский