Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XE8 vs Berlin 10.1 поломали DPI? / 19 сообщений из 19, страница 1 из 1
20.04.2016, 04:35
    #39219703
Berlin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
На компьютере с DPI отличным от 96 (в моем случае 120) создаем новое приложение с кнопкой и меткой.

В XE8 в рантайме все такого же размера как в дизайнтайме, в Berlin все увеличивается на 25%. А не должно, так как design-time DPI совпадает с run-time DPI.

Виновник похоже находится в TControl, в результате чего форма считает что она была сделана на 96 DPI:

Код: pascal
1.
2.
3.
4.
5.
constructor TControl.Create(AOwner: TComponent);
begin
  ...
  FCurrentPPI := 96;
end;



Это баг?

XE8:


Berlin:
...
Рейтинг: 0 / 0
20.04.2016, 04:49
    #39219705
asviridenkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Berlin,

А у формы PixelsPerInch чему равно в дизайне?
...
Рейтинг: 0 / 0
20.04.2016, 04:54
    #39219707
Berlin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
авторА у формы PixelsPerInch чему равно в дизайне?

Оно равно 120. В принципе убирание строчки
Код: pascal
1.
FCurrentPPI := 96;


из конструктора TControl проблему решает, но не факт что не ломается что-то еще.
...
Рейтинг: 0 / 0
20.04.2016, 10:53
    #39219929
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
1. А чего не так? Дизайн-тайм не увеличенный? Ну и хорошо.
2. Почему сравниваешь с хе8 а не с сиэттлом? High dpi в нем допиливали.
...
Рейтинг: 0 / 0
20.04.2016, 11:30
    #39219967
Berlin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
rgreat,

Ну хотя бы тем что оно перестало быть WYSIWYG и любой софт пересобранный Berlin делается визуально на 25% больше. То есть дизайн выглядит не фига не так, как должен был.

С Сиэттлом сравнить не могу, пропустил эту версию. Галка High DPI в настройках не влияет.
...
Рейтинг: 0 / 0
20.04.2016, 11:32
    #39219969
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Scaled = False и наслаждайся видом 1 в 1.
...
Рейтинг: 0 / 0
20.04.2016, 11:37
    #39219975
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
С точки зрения DPI IDE никогда не было WYSIWYG.
...
Рейтинг: 0 / 0
20.04.2016, 11:43
    #39219985
Berlin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
rgreatScaled = False и наслаждайся видом 1 в 1.

Тогда оно не будет масштабироваться вообще. Это не выход.

Я полагаю, что форма сдизайненая на 120 DPI должна выглядеть одинаково в дизайне и рантайме. По крайней мере так было всегда.

Завел баг , посмотрим.
...
Рейтинг: 0 / 0
20.04.2016, 11:51
    #39219998
errorsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Berlin,

Думаю если в дизайнере форма начнет подстраиваться под DPI мы получим много новых неведомых глюков.
...
Рейтинг: 0 / 0
20.04.2016, 11:56
    #39220001
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
BerlinrgreatScaled = False и наслаждайся видом 1 в 1.

Тогда оно не будет масштабироваться вообще. Это не выход.

Я полагаю, что форма сдизайненая на 120 DPI должна выглядеть одинаково в дизайне и рантайме. По крайней мере так было всегда.

Завел баг , посмотрим.
Дизайнер работатет в 96 DPI.

Это не баг.
Мне удобней и понятней текущее поведение дизайнера чем то что предлогаешь ты.
...
Рейтинг: 0 / 0
20.04.2016, 11:56
    #39220002
Berlin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
errorsoftBerlin,

Думаю если в дизайнере форма начнет подстраиваться под DPI мы получим много новых неведомых глюков.

Да и не надо постраиваться.

Я ж говорю что сломали прошлое поведение - теперь любое приложение сдизайненное не на 96 DPI масштабируется неправильно. Я уже по коду прошелся, происходит scaling когда его быть не должно.
...
Рейтинг: 0 / 0
20.04.2016, 12:02
    #39220011
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Чуть поясню. 96 DPI - стандарт по умолчанию, и у большинства прользователей выставлен именно он.

Если писать ПО исключительно под себя - тогда понятно что удобный чтоб дизайнилось в текущем DPI, однако в большинстве случаев надо чтобы форма выглядела прилично именно на 96 DPI, что при уменьшении с "как-бы дефолтных" 120 может (и скорей всего так и будет) и не срастись.
...
Рейтинг: 0 / 0
20.04.2016, 12:08
    #39220018
errorsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Berlin,

Тогда проще всего один раз вручную поправить dfm файлы при переходе на Seattle/Berlin
...
Рейтинг: 0 / 0
20.04.2016, 13:05
    #39220089
Berlin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Поизучал еще Vcl.Controls.pas, насколько я могу судить выделенная строчка не исполняется никогда, таким образом PixelsPerInch формы тупо игнорируется. Потому и такое поведение, и врядли это так и задумано.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
  TControl = class(TComponent)
  protected
    ...
    FCurrentPPI: Integer;
    ...
  end;

constructor TControl.Create(AOwner: TComponent);
begin
  ...
  FCurrentPPI := 96;
end;

procedure TControl.ScaleForPPI(NewPPI: Integer);
begin
  if not FIScaling and (NewPPI > 0) then
  begin
    FIScaling := True;
    try
      if FCurrentPPI = 0 then
        FCurrentPPI := GetDesignDpi;

      if NewPPI <> FCurrentPPI then
        ChangeScale(NewPPI, FCurrentPPI, True);
    finally
      FIScaling := False;
    end;
  end;
end;

function TControl.GetDesignDpi: Integer;
var
  LForm: TCustomForm;
begin
  LForm := GetParentForm(Self);
                                                                                         
  if (LForm <> nil) and (LForm is TForm) then
    Result := TForm(LForm).PixelsPerInch
  else
    Result := 96;                                                              
end;
...
Рейтинг: 0 / 0
20.04.2016, 13:12
    #39220099
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Это новый код. В 10-ке его нет.
...
Рейтинг: 0 / 0
20.04.2016, 20:23
    #39220632
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Berlin,

Scaled лучше отключать. Если сильно хочется можно форму масштабировать самому в рантайме - ScaleBy.
...
Рейтинг: 0 / 0
20.04.2016, 20:25
    #39220635
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Berlin,

Что-то они там явно правили с dpi, если считаешь, что баг - пиши в qc.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
28.01.2018, 14:13
    #39592370
Vladimir1212
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Решилась как-то эта проблема?
Перешёл с XE8 на Tokyo 10.2.2 : те же грабли с масштабированием форм на том же компьютере, где идёт разработка . У меня на нём тоже задан пользовательский масштаб для Винды 125% (DPI=120).
Пока пришлось установить для всех форм Scaled = False, а в обработчике события FormShow задать:
Код: pascal
1.
2.
3.
4.
procedure TForm.FormShow(Sender: TObject);
begin
ScaleBy(PixelsPerInch, 120);
end;


Каряво, как-то... Считаю, что тот факт, что на свойство PixelsPerInch в Object-Inspector теперь (в Berlin, Tokyo) вовсе нет никакой реакции - это БАГ!
...
Рейтинг: 0 / 0
28.01.2018, 14:33
    #39592380
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XE8 vs Berlin 10.1 поломали DPI?
Vladimir1212Решилась как-то эта проблема?Ну как сказать?
Berlin Завел баг Status: Closed
Resolution: Cannot Reproduce
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / XE8 vs Berlin 10.1 поломали DPI? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]