понедельник, 3 ноября 2014 г.

Старые программы не работают в Windows 7 - "портятся" окошки

Век живи, век учись, говорят.

Возникла проблема: старая программа, написанная, судя по всему, на Delphi, отказалась работать на новом компьютере. Такое бывает довольно часто, но вот на других новых компьютерах, с точно такими же настройками Windows 7 Pro SP1 x64 - она нормально работала! А тут - окошки портятся, контроли не работают, всё какое-то кривое. Программа, хоть и запускается, но совершенно не хочет делать некоторые вещи, например не показывает выподающие меню в некоторых важных местах.

Оказалось, что замечательная компания Microsoft в Win7 применила такой подлый трюк: если экран компьютера маленький, а разрешение - очень высокое, то по умолчанию при установке системы выбирается 125% увеличение шрифта. При этом ставятся другие растровые шрифты!

Т.е. дальше можно поменять увеличение шрифтов на 100%, или на 150%, но растровые шрифты не меняются.

Вот примеры того, как может не работать программа:

При 100% всё в порядке

При 125% нет возможности выбора директории и файла
 
При 150% всё опять появляется.

При этом если в системе поставлены растровые шрифты, принятые по умолчанию для 125% увеличения - программа не работает ни при каких параметрах!

Решение описано в статье по ссылке: http://www.rlvision.com/misc/windows_7_font_bug.asp. На всякий случай копипасчу:

WINDOWS 7 FONT SIZE BUG


As explained on this page with further information here, a "feature" in Windows 7 may cause problems for some programs in certain conditions. Basically, if you have a high resolution screen at install time, Win7 will install a larger font set (125%) by default. If you then choose go back to the standard font size (100%), Windows will keep some of the large fonts even though everything else is adjusted for standard fonts, causing programs that use these fonts to break because the text will not always fit inside the GUI.

THE SOLUTION


By editing the Windows registry you can get the original, intended fonts back:
  • Open the start menu and type regedit and then press Enter.
  • Locate the key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
  • Find the value MS Sans Serif 8,10,12,14,18,24
  • Change from SSERIFF.FON to SSERIFE.FON
  • Find MS Serif 8,10,12,14,18,24
  • Change from SERIFF.FON to SERIFE.FON
  • Finally find Courier 10,12,15
  • Change from COURF.FON to COURE.FON
  • Restart your system in order for the changes to take effect!