Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Вниз

Проблема со шрифтами   Найти похожие ветки 

 
IgneouS ©   (2007-03-20 14:00) [0]

Здравствуйте! Столкнулся со следующей проблемой: имеется некоторая программа - которая у меня на компьютере работает нормально, текст на кнопках и др. компонентах отображается корректно, но перенеся эту же программу на другой компьютер - работает она нормально, но вот текст на кнопках и вообще везе, где он только есть отображается иероглифами! Проверял на разных машинах - где-то работает нормальнот все отображается корректно, а где-то иероглифами! От чего зависит я так и не понял... подскажите, как это исправить!? Я ведь наверно не первый, кто сталкивается с этим!


 
clickmaker ©   (2007-03-20 14:03) [1]


>  Я ведь наверно не первый, кто сталкивается с этим!

и даже не второй.
Это известный глюк семерки. Лечится патчем rtl, либо танцем с бубном наподобие этого:

function GetDefaultUserCodePageAddr: PInteger;
type
 TCode = packed record
   CallOpA: Byte;
   OffsetA: Integer;
   CallOpB: Byte;
   OffsetB: Integer;
   MovOp: Byte;
   VarAddr: Pointer;
 end;
 TCodes = packed record
   Code1: TCode;
   JMP: Word;
   Code2: TCode;
 end;
var
 Code: ^TCodes;
 Count: Integer;
 MemInfo: TMemoryBasicInformation;
begin
 Result := nil;
 if (VirtualQuery(TObject,MemInfo,SizeOf(MemInfo))<SizeOf(MemInfo))
   or(MemInfo.State<>MEM_COMMIT) then Exit;
 Code:=MemInfo.BaseAddress;
 Count:=MemInfo.RegionSize;
 while Count>0 do begin
   with Code^ do
     if (Code1.CallOpA=$E8)and(Code1.CallOpB=$E8)and(Code1.MovOp=$A3)
       and(Code2.CallOpA=$E8)and(Code2.CallOpB=$E8)and(Code2.MovOp=$A3)
       and(Code1.OffsetA-Code1.OffsetB=Code2.OffsetA-Code2.OffsetB)
       and(Code1.VarAddr=Code2.VarAddr) then begin
       Result:=Code1.VarAddr;
       Break;
     end;
   Inc(PByte(Code));
 end;
end;

в .dpr

GetDefaultUserCodePageAddr^ := CP_ACP;


 
Krants   (2007-03-20 14:05) [2]

если виндоус англоязычная и "Кирилик" не поставлен по умолчанию, - тогда здесь сабака и зарыта... вообщем обратись к администратору...


 
Andy BitOff ©   (2007-03-20 20:07) [3]


> clickmaker ©   (20.03.07 14:03) [1]

А я лечу этот глюк исправлением реестра:
HLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage
1250 = c_1251.nls
1251 = c_1251.nls
1252 = c_1251.nls


 
Ketmar ©   (2007-03-20 20:16) [4]

обалдеть. вместо лечения кривого софта кривить систему...


 
IgneouS ©   (2007-03-22 23:08) [5]

clickmaker, не понял тебя) Каким rtl патчем?
И тот код, что ты дал... что с ним делать??? ))))))))))))))))) Где такое писать))) Мне честно не ясно!!!!!!!


 
Галинка ©   (2007-03-22 23:35) [6]

почему никак не могут пофиксить этот глюк уже... сама мучаюсь... переключать шрифты для не-Юникод программ надоело уже. Потому как нужны и на немецком и на русском.

Может можно типа баты для всех подобных прог писать. и программно перед запуском менять на то что надо, а после закрытия возвращать то, что было до запуска... Но тогда вопрос. Виндоус оконная система. Если одно приложение изменит системные настройки, для всех остальных это тоже изменится?


 
Плохиш ©   (2007-03-23 00:35) [7]


> Галинка ©   (22.03.07 23:35) [6]
> почему никак не могут пофиксить этот глюк уже... сама мучаюсь.
> .. переключать шрифты для не-Юникод программ надоело уже.
>  Потому как нужны и на немецком и на русском.

Пройдёт немного времени и сама откажешься от этих корявых русскоязычных программ ;-)

> Может можно типа баты для всех подобных прог писать. и программно
> перед запуском менять на то что надо

Не позволяет виндовс такого :-( При смене локальных настроек нужен перезапуск. Я так надеялся, что в XP сделают настройку локали для конкретного приложения, обломили :-(


 
clickmaker ©   (2007-03-23 11:30) [8]


> [5] IgneouS ©   (22.03.07 23:08)

в своей программе. При инициализации приложения, в *.dpr
GetDefaultUserCodePageAddr^ := CP_ACP;
Application.Initialize;
...

А насчет патча - он не до конца исправляет. Русские буквы появляются только в тексте с хотя бы одним пробелом

If you want it fixed in the Delphi IDE, open RTL70.BPL
in some hex editor (or via TFileStream), go to offset
$37bdf, you should see a

   $74 $2F (jz ...)

replace it with
   
   $EB $2F (jmp ...)

this will change TWriter.WriteMinStr from

     if LocaleStr <> UTF8Str then

to something equivalent to

   if False then

and restore D5 behaviour in the IDE. Re-edit all the forms
that got corrupted in the IDE (on a machine with original locale).
Proggies using forms can use unmodified RTL70.BPL or not use
packages at all, it will work just fine once the IDE has been
patched and forms fixed.
Not sure about the command-line compiler, maybe some other
file has to be patched.  
 
In Delphi 7 SP1 the bug hasn"t been fixed, but the offset in rtl70.bpl for
the ugly fix is now $38ABF, and you still have to change

   $74 $2F (jz ...)

replace it with
   
   $EB $2F (jmp ...)


 
Жуков Олег   (2007-03-23 11:35) [9]


> Я так надеялся, что в XP сделают настройку локали для конкретного
> приложения, обломили :-(

разве SetThreadLocale() не это самое делает?


 
Плохиш ©   (2007-03-23 11:38) [10]


> Жуков Олег   (23.03.07 11:35) [9]

Я имел ввиду настройку на уровне ярлыка для запуска.



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

Форум: "Прочее";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.039 c
15-1174214156
PARUS
2007-03-18 13:35
2007.04.15
Пятничные задачки.


2-1174986425
Sonia
2007-03-27 13:07
2007.04.15
DBCheckBox


15-1174323034
oldman
2007-03-19 19:50
2007.04.15
В дизайне я профан... :(


9-1147104863
except 2.0
2006-05-08 20:14
2007.04.15
VCL окно во весь экран.


2-1175111750
Ников
2007-03-28 23:55
2007.04.15
Как написать м в квадрате





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский