Сменить charset по всему приложению - как?

wellwell

Есть прога на нескольких языках (Delphi 2007, без юникода). Есть соответственно текстовые файлы с языками. Можно-ли как нибудь включить нужный CHARSET во всем формах, без присвоения в каждой форме персонально? DEFAULT_CHARSET не подходит, т.к. мне нужно например выставить по всей проге GB2312_CHARSET для Chinese (Simplified) и CHINESEBIG5_CHARSET для Chinese (Traditional), независимо от того, что сидит в настройки виндов "Язык для не-unicode программ".
7 ответов

wellwell

Было же "Delphi 2007, без юникода". ТМS?Кто мешает сделать наследника TForm, принимающего известный на момент создания CHARSETи процедуру, меняющую CHARSET всем Screen.Forms ("пол-сотни" - кому нужна такая прорва)?


wellwell

Есть прога на нескольких языках (Delphi 2007, без юникода). Есть соответственно текстовые файлы с языками. Можно-ли как нибудь включить нужный CHARSET во всем формах, без присвоения в каждой форме персонально?
<b>procedure</b> TMainForm.RusDirDFM;
<b>var</b>
 i,n : integer;
 F : TSearchRec;
 Path : <b>string</b>;
 L : TStringList;
<b>begin</b>
 Path := Trim(dirDFM.Text);
 <b>if</b> <b>not</b> DirectoryExists(Path) <b>then</b>
 <b>begin</b>
 MessageDlg('Неправильно задан путь',mtError,[mbOk],<b>0</b>);
 Exit;
 <b>end</b>;
 n := <b>0</b>;
 L := TStringList.Create;
 <b>if</b> (Path<>'') <b>and</b> (Path[Length(Path)]<>'\') <b>then</b> Path := Path + '\';
 i := FindFirst(Path+'*.dfm',faAnyFile-faDirectory-faVolumeID,F);
 <b>while</b> i=<b>0</b> <b>do</b>
 <b>begin</b>
 L.LoadFromFile(F.Name);
 <b>if</b> (L.Count><b>0</b>) <b>and</b> (pos('object',L[<b>0</b>])=<b>1</b>) <b>then</b>
 <b>begin</b>
 L.Text := ReplaceStr(L.Text,'DEFAULT_CHARSET','RUSSIAN_CHARSET');
 L.SaveToFile(F.Name);
 inc(n);
 <b>end</b>;
 i := FindNext(F);
 <b>end</b>;
 FindClose(F);
 L.Free;
 MessageDlg('Обработано файлов : '+IntToStr(n),mtInformation,[mbOk],<b>0</b>);
<b>end</b>;


wellwell

wellwell,тынц


wellwell

wellwell,Обход Screen.Forms не катит?


wellwell

Вариант, в принципе, но там нету форм которые создаются по мере необходимости, а только те, которые сейчас на экране. Там этих форм, с пол-сотни, думаю, может есть способ все сразу прибить к нужному чарсету.


wellwell

wellwell,Ну... либо при создании форм указывать нужный чарсет, либо как сказал Соколинский Борис, пробежаться по созданным да явно тыкнуть в нужную сторону.либо еще что-то, о чем я не знаю/не додумался =)


wellwell

Или не мучаться дурью и перейти на Юникод.--http://www.podgoretsky.com