Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

нестандартный размер шрифтов   Найти похожие ветки 

 
Сафаров ©   (2005-12-02 16:35) [0]

Столкнулся с такой проблемой. Мое приложение, которое неплохо выглядит у меня (я так надеюсь :о)), "рушится" на машинах, на которых установлен не "обычный размер шрифтов 96 на дюйм", а какой-нибудь особый - например крупный.
Вопрос: можно ли как-то в приложении запретить ОС влиять на размер шрифтов в моем приложении?


 
Jimmy   (2005-12-02 20:50) [1]

Если я не ошибаюсь - давно было дело - можно так: 1. свойство формы Scale сделать False; 2. использовать не системные шрифты, а свои, которые приложение на время работы устанавливает в системе; 3. задавать размер шрифта не Font.Size:=12; а Font.Height:=20.


 
Anatoly Podgoretsky ©   (2005-12-02 21:26) [2]

Сафаров ©   (02.12.05 16:35)  
Ты кто такой? Это привилегия пользователя.


 
Сафаров ©   (2005-12-03 10:29) [3]

to Anatoly Podgoretsky ©   (02.12.05 21:26) [2]
К своему сожалению с вами согласен :o(
Просто так было бы проще всего. Взять да запретить
Особенно когда присылают список багов на нескольких страницах...


 
Jimmy   (2005-12-03 19:23) [4]

Я понял, что Вы чем-то недовольны? Но чем? И что за мода обращаться к незнакомым людям на ты?


 
Сафаров ©   (2005-12-04 12:38) [5]

Поговорю с заказчиком, так ли критичен для них размер букв. Если нет, сделаю как рекомендует Jimmy. Попробовал получается


 
Amoeba ©   (2005-12-05 15:17) [6]

Можно!

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

Вы наверняка задавались вопросом о том, как избежать искажений. И находили в сети одни и те же рецепты: использовать шрифты TrueType и отключать свойство Scaled у форм. Рецепт, предлагающий использовать только шрифты TrueType + Scaled = False для форм - верен. Однако тут есть некоторые неудобства.
Дело в том, что ни один из стандартных TrueType шрифтов не сравнится по качеству отображения с MS Sans Serif, который по умолчанию используется в вашем приложении. Самый близкий - Arial все же имеет довольно заметные отличия и проигрывает MS Sans Serif по читаемости.

Искажений форм так же полностью избежать не удастся. Особенно это может повлиять на компоновку сложных форм, а также при использовании в интерфейсе изображений и прочих немасштабируемых элементов. Иногда хочется просто запретить масштабирование и защитить программу от влияния крупных шрифтов. Но использовать MS Sans Serif в этом случае нельзя, так как в режиме крупных шрифтов система "сдвигает" их на 2 пункта вверх и шрифт 8pt MS Sans Serif выглядит как 10pt MS Sans Serif при мелких шрифтах.

для справки
В режиме стандартных размеров шрифтов в качестве системного используется, в основном, MS Sans Serif - рубленый шрифт без засечек. Он имеет размеры 8pt, 10pt, 12pt, 14pt, 18pt и 24pt. В основном используется размер 8pt. В режиме крупных шрифтов система увеличивает все шрифты на 120%. ( С 96 pixels per inch до 120 pixels per inch). Шрифт MS Sans Serif имеет всего 6 размеров. Поэтому 8pt становится 10pt, 10pt - 12pt и т.д. Шрифт 8pt MS Sans Serif выглядит как 10pt MS Sans Serif при мелких шрифтах. Шрифты же TrueType могут имеют произвольные размеры и шаг изменения равен 1pt. Поэтому при крупных шрифтах размеры TrueType и не-TrueType шрифтов изменяются по разному.



Предлагаемое решение способно защитить программу от влияния режима крупных шрифтов и не отказываться от шрифта MS Sans Serif при разработке программы. Подход состоит в том, чтобы заменять все шрифты MS Sans Serif на Arial при запуске программы при крупных шрифтах. Создавать программу, естественно, следует при мелких шрифтах.

Можно написать невизуальный компонент и добавить его на каждую форму. Компонент при загрузке проверяет режим и при обнаружении режима "Big Fonts" "обходит" все визуальные компоненты для замены шрифта. Также компонент заботится о том, чтобы свойство Scaled у форм было отключено.

unit glSmallFontsDefence;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
 TglSmallFontsDefence = class(TComponent)
 private
   procedure UpdateFonts(Control: TWinControl);
   { Private declarations }
 protected
   procedure Loaded; override;
 public
   constructor Create(AOwner: TComponent); override;
 published
   { Published declarations }
 end;

procedure Register;

implementation

function IsSmallFonts: boolean;{Значение функции TRUE если мелкий шрифт}
var DC: HDC;
begin
 DC:=GetDC(0);
 Result:=(GetDeviceCaps(DC, LOGPIXELSX) = 96);
 { В случае крупного шрифта будет 120}
 ReleaseDC(0, DC);
end;

procedure Register;
begin
 RegisterComponents("Gl Components", [TglSmallFontsDefence]);
end;

{ TglSmallFontsDefence }

constructor TglSmallFontsDefence.Create(AOwner: TComponent);
begin
 inherited;
 if (Owner is TForm) then (Owner as TForm).Scaled := false;
end;

procedure TglSmallFontsDefence.Loaded;
begin
 inherited;
 if (Owner is TForm) then (Owner as TForm).Scaled := false;
 if csDesigning in ComponentState then
 begin
   if not IsSmallFonts then
     ShowMessage("Проектирование приложения в режиме крупных" +
           " шрифтов недопустимо!"#13#10+
                 "Компонент TglSmallFontsDefence отказывается" +
                 " работать в таких условиях.");
 end else
   UpdateFonts((Owner as TForm));
end;

procedure TglSmallFontsDefence.UpdateFonts(Control: TWinControl);
var
 i: integer;
 procedure UpdateFont(Font: TFont);
 begin
   if CompareText(Font.Name, "MS Sans Serif") <> 0 then exit;
   Font.Name := "Arial";
 end;
begin
 if IsSmallFonts then exit;
 UpdateFont(TShowFont(Control).Font);
 with Control do
 for i:=0 to ControlCount-1 do
 begin
   UpdateFont(TShowFont(Controls[i]).Font);
   if Controls[i] is TWinControl then UpdateFonts(Controls[i] as TWinControl);
 end;

end;


end.



Вы можете добавить свойство Options типа перечисления, в котором задать опции исключения некоторых классов компонентов. К примеру, можно добавить возможность отключать замену шрифтов для потомков TCustomGrid. Очень часто пользователи используют режим крупных шрифтов, чтобы улучшить читаемость таблиц данных (TDBGrid). Тогда не надо лишать их этой возможности.


 
Сафаров ©   (2005-12-07 23:55) [7]

Спасибо


 
Rouse_ ©   (2005-12-08 09:49) [8]


> Jimmy   (03.12.05 19:23) [4]
> Я понял, что Вы чем-то недовольны? Но чем? И что за мода
> обращаться к незнакомым людям на ты?

ОФФ:
Это пережиток ФИДО где обращение на Вы считается оскорблением. В обычном случае обращение происходит не к конкретному человеку а к виртуальному образу, назвать коего Вы никак нельзя :)



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

Текущий архив: 2006.01.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
2-1135196659
Scrol
2005-12-21 23:24
2006.01.08
Поиск


1-1133936384
KvORubin
2005-12-07 09:19
2006.01.08
Как в МЕМО1 в первой строке


2-1134909043
Bounty
2005-12-18 15:30
2006.01.08
WebBrowser


2-1134909472
з. танька
2005-12-18 15:37
2006.01.08
выгрузить картинку из имаги


4-1130765521
Чапаев
2005-10-31 16:32
2006.01.08
Регистрация сервиса