Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 27 апр 2024, 03:37

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: 23 июн 2017, 10:54 
Не в сети

Зарегистрирован: 24 апр 2013, 12:08
Сообщений: 37
Добрый день.

Если форма создана на компьютере с DPI = 96. Для сохранения и восстановления размеров формы используется компонент TPropStorageEh. На компьютере с DPI = 120 при каждом открытии форма становится всё больше и больше и уезжает вправо вниз.

Пример во вложении.

Для воспроизведения нужно на ПК с Windows 7 установить средний шрифт 125% (Панель управления\Оформление и персонализация\Экран, см. рисунок). Затем перезайти в Windows, чтобы шрифты стали больше. После этого нужно циклично запускать и закрывать программу. В результате форма при каждом новом запуске будет становиться больше и уезжать вправо вниз.


Вложения:
ehl.png
ehl.png [ 31.87 KiB | Просмотров: 2957 ]
EhLibError12_PropStorage.zip [52.05 KiB]
Скачиваний: 74
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 30 июн 2017, 07:45 
Не в сети

Зарегистрирован: 23 мар 2017, 13:41
Сообщений: 70
На Win10 ситуация та же, чтобы воспроизвести проблему достаточно создать пустую форму и кинуть туда TPropStorageEh и TIniPropStorageManEh и в StoredProps добавить Размер и позицию формы.

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

IDE 10.2 Tokyo

Код:
object Form9: TForm9
  Left = 0
  Top = 0
  Caption = 'Form9'
  ClientHeight = 188
  ClientWidth = 235
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object PropStorageEh1: TPropStorageEh
    Section = 'test'
    StorageManager = IniPropStorageManEh1
    StoredProps.Strings = (
      '<P>.Height'
      '<P>.Left'
      '<P>.PixelsPerInch'
      '<P>.Top'
      '<P>.Width')
    Left = 48
    Top = 32
  end
  object IniPropStorageManEh1: TIniPropStorageManEh
    IniFileName = 'test_settings.ini'
    Left = 48
    Top = 88
  end
end


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 25 авг 2017, 08:29 
Не в сети

Зарегистрирован: 23 мар 2017, 13:41
Сообщений: 70
Тема до сих пор актуальна


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 28 авг 2017, 14:58 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

Укажите, пожалуйста, больше данных о версиях окружения (Windows, Delphi, EhLib)

В
Microsoft Windows [Version 6.1.7601]
Delphi XE5 Version 19.0.14356.6604
EhLib 9.1 Build 9.1.029

сколько раз не запускай, окно остается в прежнем размере.


Вложения:
sshot-36.png
sshot-36.png [ 85.75 KiB | Просмотров: 2791 ]

_________________
Best regards
EhLib support Team
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 05 окт 2017, 10:02 
Не в сети

Зарегистрирован: 24 апр 2013, 12:08
Сообщений: 37
Вот пример, у которого две формы с разным DPI (чтобы вы точно увидели эффект) - https://yadi.sk/d/p9cJR6im3NVPeN . Лучше используйте компьютер с DPI = 96 (т.е. 100%). В архиве есть исходники и скомпиленный пример. Там же есть и файл props.ini, в который сохраняются свойства. На компьютере с 96 DPI при каждом запуске форма становится всё меньше и сдвигается налево вверх.

Windows 7 Профессиональная 64-bit SP1
Delphi 10.2 Tokyo
EhLib 9.1.030


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 окт 2017, 13:41 
Не в сети

Зарегистрирован: 15 май 2017, 14:01
Сообщений: 100
Та же проблема. Недавно поставил на клиентскую машину (сейчас к ней доступа нет). Всего за пять открытий форма прячется полностью и ее не видно. А поскольку она у меня showmodal, то прогу просто так не закроешь.
создавалась на:
Ehlib 9.0, Win 10 х64, RAD 10.1, размер текста 100%
тестировалась на
WinXp x32, шрифт в свойствах не посмотрел, но похоже на 125%


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 окт 2017, 14:29 
Не в сети

Зарегистрирован: 23 мар 2017, 13:41
Сообщений: 70
Вот как просто все воспроизвести:

Создаем форму, cтавим PixelsPerInch = 120, если ваше текущее 96 к примеру, или на оборот, если ваше текущее 120 - тогда ставим PixelsPerInch = 96, главное чтобы они различались.
Кидаем на форму TPropStorageEh, указываем свойства Form Pos, Frm Size - профит.

добавил гифку, текущий PPI = 96, PPI формы = 120
Изображение


Вложения:
testDpi.zip [5.96 KiB]
Скачиваний: 71
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 окт 2017, 04:36 
Не в сети

Зарегистрирован: 23 мар 2017, 13:41
Сообщений: 70
Вообще-то все это стало проявляться после того, как в embarcadero попытались исправить проблему со шрифтами IDE, которая была в Sietle (при PPI = 120, шрифт в некоторых тулбарах ИДЕ был нечитабельный).
В Berlin это как бы исправили, но появилась вот эта новая проблема.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2017, 11:52 
Не в сети

Зарегистрирован: 23 мар 2017, 13:41
Сообщений: 70
Проблема решена следующим образом:
"Эмбаркадеровцы" с выходом "берлина" что-то там профиксили в VCL, чтобы нормальные шрифты были в IDE, когда PPI экрана разрабочика не равно 96,
а при считывании настроек с помощью компонента PropStorageEh все равно производится перерасчет с учетом PPI.
Код:
procedure TFormStoragePropertyInterceptor.Readed;
var
  Placement: TWindowPlacement;
{$IFDEF EH_LIB_20}
var
  StoredWindowHandle: HWnd;
{$ENDIF}
begin
  inherited Readed;
  // для версий дельфи больше Siettle пересчитывать ненадо
  FHeight := MulDiv(FHeight, Screen.PixelsPerInch, FPixelsPerInch);
  FLeft := MulDiv(FLeft, Screen.PixelsPerInch, FPixelsPerInch);
  FTop := MulDiv(FTop, Screen.PixelsPerInch, FPixelsPerInch);
  FWidth := MulDiv(FWidth, Screen.PixelsPerInch, FPixelsPerInch);


так вот этот пересчет лишний, если версия дельфи больше Siettle

Но проблема частично осталась, форма не меняет свою позицию, но размер формы все равно меняется, хоть и не значительно: Ширина на 5 пикселей, а высота на 1).


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2017, 19:18 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

Ошибка воспроизводится при создании проектов в RAD Studio 10.1 и RAD Studio 10.2 под Win7 и WinXP.
Постараемся исправить в следующей сборке.
Спасибо за Демо проект.

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 ноя 2017, 04:56 
Не в сети

Зарегистрирован: 24 апр 2013, 12:08
Сообщений: 37
Добрый день.

В версии 9.1.033 ошибка не воспроизводится.

Спасибо за исправление.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB