Форум: "Основная";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];
ВнизПомогите перевести компонент из D5 в CB5 Найти похожие ветки
← →
Aser17 (2002-03-08 06:22) [0]
unit janLanguage;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,TypInfo,Inifiles;
type
TjanLanguage = class(TComponent)
private
LanguageFile:string;
procedure LoadLanguage(AForm: TForm; Afile: string);
procedure SaveLanguage(AForm: TForm; Afile: string);
function appldir: string;
function inifile: string;
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
procedure InitLanguage(AForm:TForm);
procedure ChangeLanguage(AForm:Tform);
published
{ Published declarations }
end;
procedure Register;
implementation
const
cr = chr(13)+chr(10);
tab = chr(9);
procedure Register;
begin
RegisterComponents("Jans 2", [TjanLanguage]);
end;
function TjanLanguage.appldir:string;
begin
result:=extractfilepath(application.exename);
end;
function TjanLanguage.inifile:string;
begin
result:=changefileext(application.exename,".ini");
end;
procedure TjanLanguage.ChangeLanguage(AForm: Tform);
var
ini:TIniFile;
od:TOpendialog;
begin
od:=TOpendialog.Create(self) ;
od.InitialDir :=appldir;
od.Filter :="Language Files |*.lng";
if od.Execute then
begin
LanguageFile:=od.FileName ;
ini:=TInifile.Create (inifile);
ini.WriteString ("Language",Aform.name,LanguageFile);
ini.free;
LoadLanguage (Aform,LanguageFile)
end;
od.free;
end;
procedure TjanLanguage.InitLanguage(AForm: TForm);
var
ini:TIniFile;
begin
LanguageFile:=appldir+"Language.lng";
SaveLanguage (Aform,LanguageFile);
ini:=TInifile.Create (inifile);
LanguageFile:=ini.readString ("Language",Aform.name,LanguageFile);
if fileexists(LanguageFile) then
LoadLanguage (Aform,LanguageFile);
ini.WriteString ("Language",Aform.name,LanguageFile);
ini.free;
end;
procedure TjanLanguage.LoadLanguage(AForm:TForm;Afile:string);
var c:Tcomponent;
ini:tinifile;
langfile:string;
langs:TStringlist;
i,p:integer;
aname,avalue:string;
afrm,acomp,aprop:string;
AComponent:Tcomponent;
PropInfo:PPropInfo;
procedure split(s:string);
var p:integer;
begin
p:=pos("=",s);
aname:=copy(s,1,p-1);
avalue:=copy(s,p+1,length(s));
avalue:=stringreplace(avalue,"~~",cr,[rfreplaceall]);
p:=pos(".",aname);
afrm:=copy(aname,1,p-1);
aname:=copy(aname,p+1,length(aname));
p:=pos(".",aname);
acomp:=copy(aname,1,p-1);
aprop:=copy(aname,p+1,length(aname));
end;
begin
langfile:=Afile;
ini:=tinifile.Create (langfile);
langs:=tstringlist.create;
ini.ReadSectionValues ("TRANSLATIONS",langs);
if langs.Count >0 then
begin
for i:=0 to langs.count-1 do
begin
split(langs[i]);
if Aform.name<>Afrm then continue;
AComponent:=Aform.findcomponent(acomp);
if AComponent= nil then continue;
PropInfo:=GetPropInfo(Acomponent,aprop);
if PropInfo<>nil then
if propinfo^.PropType^.Kind= tkLString then
setStrProp(Acomponent,aprop,avalue);
end;
end;
ini.free;
langs.free;
end;
procedure TjanLanguage.SaveLanguage(AForm:TForm;Afile:string);
var
i:integer;
langini:TInifile;
LangFile:string;
acap:string;
ahint:string;
atext:string;
PropInfo:PPropInfo;
m:Tcomponent;
begin
LangFile:=Afile;
langini:=TInifile.Create(LangFile);
for i:=0 to Aform.ComponentCount-1 do
begin
m:=Aform.components[i];
PropInfo:=GetPropInfo(m,"caption");
if PropInfo<>nil then
begin
acap:=GetStrProp(m,PropInfo);
acap:=stringreplace(acap,cr,"~~",[rfreplaceall]);
if ((acap<>"")and(acap<>"-")) then
Langini.WriteString ("Translations",AForm.name+"."+m.name+".Caption",acap)
end;
PropInfo:=GetPropInfo(m,"hint");
if PropInfo<>nil then
begin
ahint:=GetStrProp(m,PropInfo);
ahint:=stringreplace(ahint,cr,"~~",[rfreplaceall]);
if ahint<>"" then
Langini.WriteString ("Translations",AForm.name+"."+m.name+".Hint",ahint)
end;
PropInfo:=GetPropInfo(m,"text");
if PropInfo<>nil then
begin
atext:=GetStrProp(m,PropInfo);
atext:=stringreplace(atext,cr,"~~",[rfreplaceall]);
if atext<>"" then
Langini.WriteString ("Translations",AForm.name+"."+m.name+".Text",atext)
end;
end;
Langini.Free;
end;
end.
← →
Sergey_n (2002-03-09 02:23) [1]А зачем??? CB5 тебе и Delphi код откомпилит за милу душу, даже не обругается, просто добавь его в проект и усё.
← →
Aser17 (2002-03-09 06:03) [2]Хммм... Откомпилирует? Ладно, попробую :) thanx :)
← →
Aser17 (2002-03-09 06:18) [3]Не компилируется однако, выдает ошибку:
[Linker Fatal Error] Fatal: Expected a file name:
Имя файла - janLaguage.pas
← →
Sergey_n (2002-03-10 01:33) [4]Не знаю как ты компилил, я специально попробовал сейчас это сделать, выдал только два предупреждения типа переменная не используется.
← →
Aser17 (2002-03-10 07:30) [5]Большое спасибо :) Я просто не вставил строчку
USEUNIT("janLanguage.pas");
Теперь все отлично. Еще раз thanx.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c