Вопрос по inno-setup – Ответ не имеет смысла и ни на что не повлияет, не говоря уже о проблеме в вопросе. Функция не только не будет вызвана, но и не является операцией.

1

дал установку с пользовательскими страницами мастера и пользовательскими фоновыми изображениями. Проблема с нестандартными системами DPI.

Когда я запускаю эту настройку, фоновые изображения не отображаются должным образом. Как определить размер DPI и использовать пользовательские настройки для страниц мастера?

Ваш Ответ

3   ответа
4

Вы можете определить размер DPI, используяTGraphicsObject.PixelsPerInch собственности и загрузить другое изображение.

Тем не менее, документация InnoSetup предполагает, чтоTGraphicsObject не имеетPixelsPerInch атрибут, это вместо атрибутаTFont объекты.

Таким образом, можно определить DPI и реализовать пользовательские настройки с помощью кода, подобного следующему:

procedure CheckDPI;
var
  CurrentDPI, StandardDPI, MediumDPI, LargeDPI: Integer;
begin
  { Get the current DPI }
  CurrentDPI  := WizardForm.Font.PixelsPerInch;

  { Store defaults determined from Windows DPI settings }
  StandardDPI := 96;  { 100% }
  MediumDPI   := 120; { 125% }
  LargeDPI    := 144; { 150% }

  if (CurrentDPI >= StandardDPI) and (CurrentDPI < MediumDPI) then 
  begin
    { Execute some custom code for small to medium DPI }
  end
  else if (CurrentDPI >= MediumDPI) and (CurrentDPI < LargeDPI) then
  begin
    { Execute some custom code for medium to large DPI }
  end
  else if (CurrentDPI >= LargeDPI) then
  begin
    { Execute some custom code for large DPI or above }
  end;
end;
ВидетьInno Setup WizardImageFile выглядит плохо с масштабированием шрифтов в Windows 7 например, как это применяется на практике кWizardImageFile а такжеWizardSmallImageFile. Martin Prikryl
@TLama Хотя это правда, Inno Setup не объявляет о поддержке DPI для каждого монитора в своем манифесте. Таким образом, для Inno Setup система виртуализирует все экраны с одинаковым DPI. Martin Prikryl
Начиная с Windows 8.1 пользователи могут настроить масштабирование DPI для каждого монитора иFont.PixelsPerInch всегда возвращает значение DPI для основного монитора, так что вы немногоустаревший с таким подходом ;-) За исключением того, что вы должны слушатьWM_DPICHANGED Уведомления и адаптировать окно к измененному DPI (где это изменение может быть просто перемещение окна на монитор с другими настройками DPI). Чтобы получить DPI для определенного окна, можноtry this (это полностью не проверено мной, написано из Windows SDK). TLama
-3

чтобы обмануть Inno Setup:

function ScaleX(Value: Integer): Integer;
begin
  Result := Value;
end;

function ScaleY(Value: Integer): Integer;
begin
  Result := Value;
end;

Bing GO ~

Ответ не имеет смысла и ни на что не повлияет, не говоря уже о проблеме в вопросе. Функция не только не будет вызвана, но и не является операцией. Deanna
Как бы это обмануть Inno Setup? Ну, эти функции могут быть вызваны, но из вашего собственного скрипта, и поэтому для меня немного понятно, зачем вообще их вызывать. TLama
4

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

Вы можете определить размер DPI, используяTGraphicsObject.PixelsPerInch собственности и загрузить другое изображение.

Спасибо за ответ, но я не могу найти код для этого. Почему Inno просто не может автоматически обнаруживать и масштабировать от 96 до любых точек на дюйм? user830054
Это делает это автоматически. Однако само изображение имеет фиксированный размер в пикселях и поэтому физически меньше на экране / настройке с более высоким разрешением. Я уже дал вам свойство для проверки, вам просто нужно извлечь другое изображение в соответствии с (как вы уже извлекаете изображение для использования в любом случае) Deanna

Похожие вопросы