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

Вниз

Некорректное отображение программ Дельфи на некоторых компах   Найти похожие ветки 

 
Franzy   (2009-05-19 17:11) [0]

Столкнулся со следующей проблемой при запуске своей проги на чужом компе: часть контролов оказалась не в тех местах, где должна быть, а оказались смещенными на значительные расстояния на форме. Причем те контролы, у которых были анкоры на боттом и райт, вообще с формы пропали и никак не желали появляться при любом изменении размеров окна. Они всегда оказываются как бы за пределами окна! Такое ощущение, как будто винда сообщает форме неправильные размеры окна. Т.е. окно у нас, например, 300х400 пикселов, а винда говорит, что оно на самом деле 600х800.

Никто с подобным не сталкивался?

(Происходит на единственном компе, на остальных все, как надо.)

Винда - хп про, монитор ЖК, обычная 15-ка. Стоит классическая тема. Пробовал менять тему, глюки остались.


 
Юрий Зотов ©   (2009-05-19 18:07) [1]

В настройках систем прописан крупный шрифт?


 
CrytoGen   (2009-05-19 19:20) [2]

Размеры окна в дизайн тайме и разрешение монитора на котором запускаете?


 
Anatoly Podgoretsky ©   (2009-05-20 12:59) [3]

> Юрий Зотов  (19.05.2009 18:07:01)  [1]

Не крупный, а особый, точнее 200%


 
Franzy   (2009-05-22 13:40) [4]

2Юрий Зото
Да, было такое ощущение. Капшионы на некоторых кнопках явно за границы кнопок вылазили.

2CrytoGen
Вряд ли связано с разрешением. Запускал на разных компах с разными мониторами и разрешениями, траблы только на одном.


 
Германн ©   (2009-05-23 00:35) [5]


> Franzy   (22.05.09 13:40) [4]
>
> 2Юрий Зото
> Да, было такое ощущение. Капшионы на некоторых кнопках явно
> за границы кнопок вылазили.

Какое уж тут "очучение"? И так ясно. :)
А вот ЮЗ как-то говорил, что он свои программы всегда разрабатывает при крупном шрифте в настройках, И он прав!.


 
KilkennyCat ©   (2009-05-23 00:37) [6]


> при крупном шрифте в настройках, И он прав!.

Не обязательно. Но проверять, как они себя ведут при нестандартных настройках - обязательно.


 
Германн ©   (2009-05-23 01:24) [7]


> KilkennyCat ©   (23.05.09 00:37) [6]
>
>
> > при крупном шрифте в настройках, И он прав!.
>
> Не обязательно.

А что ещё проверять?


 
Игорь Шевченко ©   (2009-05-23 01:53) [8]


> А что ещё проверять?


А по большому счету дофига чего проверять, только никто это не делает. А что проверять подробно описано в доке от MS про Windows Application Compatibility.

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


 
Германн ©   (2009-05-23 02:36) [9]


> Игорь Шевченко ©   (23.05.09 01:53) [8]
>
>
> > А что ещё проверять?
>
>
> А по большому счету дофига чего проверять

Большой счёт на сём форуме?
Не смешите мои тапочки!


 
KilkennyCat ©   (2009-05-23 02:56) [10]


> Не смешите мои тапочки!

Твои тапочки могут оборжаться.
Но:
Зотов учитывает нюансы,
Шевченко даже знает, что почитать,
Лично я даже мелкую пограммульку, нафиг никому не нужную, прогоняю во всех режимах, на всех версиях Вин, на разных платформах, после чего отдаю в тестирование нескольким нормальным пользователям и только потом в "свет".
И куча народа здесь делает сие. Одна девушка так вообще профи-тестер.
И все мы на сём форуме.


 
Franzy   (2009-05-23 09:56) [11]

Так, если это трабла с крупными шрифтами, то как этого избежать? Как заставить Дельфи правильно отображать во всех режимах? Есть какие-нибудь рекомендации?


 
Германн ©   (2009-05-24 03:00) [12]


> Franzy   (23.05.09 09:56) [11]
>
> Так, если это трабла с крупными шрифтами, то как этого избежать?
>  Как заставить Дельфи правильно отображать во всех режимах?
>  

А никак! "Заставить" никого нельзя!
Токмо "пробовать". И подбирать. С учётом!


 
Franzy   (2009-05-24 11:32) [13]

А почему хоть такое происходит? Из-за того, что капшионы в кнопки не влазят? Так вроде обычным шрифтам это не очень мешает. Что менять-то?


 
Amoeba ©   (2009-05-25 16:11) [14]


> Franzy   (23.05.09 09:56) [11]
>
> Так, если это трабла с крупными шрифтами, то как этого избежать?
>  Как заставить Дельфи правильно отображать во всех режимах?
>  Есть какие-нибудь рекомендации?

Можно запретить крупные шрифты в своей программе.

Защита приложений от крупных шрифтов.

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

Вы наверняка задавались вопросом о том, как избежать искажений. И находили в сети одни и те же рецепты: использовать шрифты 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). Тогда не надо лишать их этой возможности.

составление статьи: Андрей Чудин, ЦПР ТД Библио-Глобус.


 
Игорь Шевченко ©   (2009-05-25 16:18) [15]


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


Старая статья. Уже давно по умолчанию используется Tahoma


 
Franzy   (2009-05-26 12:15) [16]

Я, наверное, туплю, но не могу найти свойства scaled у шрифтов. Я что-то не так понял?


 
Franzy   (2009-05-26 12:16) [17]

А, это свойство формы, блин.


 
Franzy   (2009-05-26 12:34) [18]

Рецепт, предложенный Amoeba не сработал. Зато я выяснил, в чем дело. Проблема не в крупных шрифтах, а в масштабе изображения (в настройках монитора): если вместо стандартных 96 точек на дюйм использовать крупный масштаб (120) или особый, то такая лажа и проявляется. Бороться с этим можно, видимо, двумя способами: 1) разрабатывать прогу сразу для крупного масштаба (но тогда в нормальном масштабе она будет выглядеть по-уродски), 2) В системных требованиях к проге прописать необходимость использования нормального масштаба.
Я лично предпочту второй вариант.


 
Игорь Шевченко ©   (2009-05-26 14:13) [19]


> Проблема не в крупных шрифтах, а в масштабе изображения
> (в настройках монитора): если вместо стандартных 96 точек
> на дюйм использовать крупный масштаб (120) или особый, то
> такая лажа и проявляется


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


> 2) В системных требованиях к проге прописать необходимость
> использования нормального масштаба.
> Я лично предпочту второй вариант.


Обычно после таких требований программа отправляется в корзину


 
Franzy   (2009-05-26 14:53) [20]

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

Проблема в том, что он не работает. Вернее, работает только частично. Да, капшионы влязят в кнопки. Но контролы все равно расползаются со своих мест. Часть уползает за экран и становится недоступна.


 
KilkennyCat ©   (2009-05-26 15:02) [21]

Вообще-то, должно все увеличиваться пропорционально. Сие свойство есть.


 
Amoeba ©   (2009-05-26 16:08) [22]


> Franzy   (26.05.09 14:53) [20]
>
> >Вообще-то это и есть крупный шрифт, и мой тезка тебе выдал
> рецепт борьбы с искажениями.
>
> Проблема в том, что он не работает. Вернее, работает только
> частично. Да, капшионы влязят в кнопки. Но контролы все
> равно расползаются со своих мест. Часть уползает за экран
> и становится недоступна.

А у меня почему-то все работает как надо, и контролы никуда не расползаются. В чем дело?


 
Franzy   (2009-05-27 12:58) [23]

Вероятно, в якорях и алайне.


 
Германн ©   (2009-05-28 01:49) [24]


> Franzy   (27.05.09 12:58) [23]
>
> Вероятно, в якорях и алайне.

Ну так и пробуй разные варианты.
Общих рекомендаций в подобных ситуациях нет.


 
Franzy   (2009-05-28 12:09) [25]

Если бы я делал прогу на продажу, я бы этим стал заморачиваться. Поскольку же прога делается для конкретного заказчика, заморачиваться не буду. Если у него все будет нормально, смысла тратить на это время нет по-любому.


 
Дмитрий Белькевич   (2009-05-28 23:14) [26]

>Если бы я делал прогу на продажу, я бы этим стал заморачиваться. Поскольку же прога делается для конкретного заказчика, заморачиваться не буду. Если у него все будет нормально, смысла тратить на это время нет по-любому.

Главное, что бы у заказчика не появилось нового требования - что бы работало и на больших и на мелких шрифтах (аппетит приходит во время еды, знакомо). Или еще кому-то программу не пришлось продавать...



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

Форум: "Основная";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.005 c
15-1262571775
uw
2010-01-04 05:22
2010.03.21
Что и требовалось доказать


2-1263314056
almal
2010-01-12 19:34
2010.03.21
по работе с FTP


15-1262338995
dr_creigan
2010-01-01 12:43
2010.03.21
Ядра процессоров


2-1263667987
Inna21
2010-01-16 21:53
2010.03.21
DBASE


8-1203768940
nuflin
2008-02-23 15:15
2010.03.21
вершинные шейдеры





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