Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Изменение размера шрифта во всем InnoSetup Installer пропорционально

Delphi , Программа и Интерфейс , Инсталяция

В статье рассматривается вопрос изменения размера шрифта во всем Installer InnoSetup пропорционально. Это означает изменение размера шрифта для всех контролов, отображающих текст на страницах мастера (метки, текстовые поля, флажки и т. д.).

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

procedure ChangeFontSize(Page: TWizardPage; Percent: Double);
var
  Index: Integer;
  Control: TControl;
  StaticText: TNewStaticText;
  PreviousSize: Integer;
  NewSize: Integer;
  PercentString: String;
begin
  for Index := 0 to Page.Surface.ControlCount - 1 do
  begin
    Control := Page.Surface.Controls[Index];
    if Control is TNewStaticText then
    begin
      StaticText := TNewStaticText(Control);
      PreviousSize := StaticText.Font.Size;
      PercentString := Copy(FloatToStr(Percent * 100), 1, 3) + '%'
      NewSize := Round(PreviousSize * Percent);
      StaticText.Font.Size:= NewSize;
    end;
  end;
end;

procedure InitializeWizard();
var
  Pages: array of Integer;
  Page: TWizardPage;
  Index: Integer;
  Percent: Double;
begin
  Pages := [wpWelcome, wpLicense, wpPassword, wpInfoBefore,
            wpUserInfo, wpSelectDir, wpSelectComponents,
            wpSelectProgramGroup, wpSelectTasks, wpReady,
            wpPreparing, wpInstalling, wpInfoAfter, wpFinished];

  for Index := 0 to Length(Pages) - 1 do
  begin
    Page := PageFromID(Pages[Index])
    Percent := 1.50  // +50% size increment
    ChangeFontSize(Page, Percent);
  end;
end;

Пример кода выше изменяет размер шрифта для всех контролов на страницах мастера пропорционально заданному проценту. В данном случае используется увеличение размера шрифта на 50%.

Однако, как отмечается в вопросе, некоторые контролы не обрабатываются в цикле, и размер шрифта для некоторых контролов не адаптируется автоматически к новому размеру, что делает текст нечитабельным. Чтобы решить эти проблемы, можно обновить код, как показано ниже:

procedure ChangeFontSize(Page: TWizardPage; Percent: Double);
var
  Index: Integer;
  Control: TControl;
  PercentString: String;
  PreviousFontSize, NewFontSize: Integer;
  NewControlWidth, NewControlHeight: Integer;
begin
  for Index := 0 to Page.Surface.ControlCount - 1 do
  begin
    Control := Page.Surface.Controls[Index];

    if Control is TButton then
      PreviousFontSize := TButton(Control).Font.Size
    else if Control is TCheckBox then
      PreviousFontSize := TCheckBox(Control).Font.Size
    else if Control is TComboBox then
      PreviousFontSize := TComboBox(Control).Font.Size
    else if Control is TEdit then
      PreviousFontSize := TEdit(Control).Font.Size
    else if Control is TForm then
      PreviousFontSize := TForm(Control).Font.Size
    else if Control is TLabel then
      PreviousFontSize := TLabel(Control).Font.Size
    else if Control is TListBox then
      PreviousFontSize := TListBox(Control).Font.Size
    else if Control is TMemo then
      PreviousFontSize := TMemo(Control).Font.Size
    else if Control is TNewCheckListBox then
      PreviousFontSize := TNewCheckListBox(Control).Font.Size
    else if Control is TNewStaticText then
      PreviousFontSize := TNewStaticText(Control).Font.Size
    else if Control is TPanel then
      PreviousFontSize := TPanel(Control).Font.Size
    else if Control is TPasswordEdit then
      PreviousFontSize := TPasswordEdit(Control).Font.Size
    else if Control is TRadioButton then
      PreviousFontSize := TRadioButton(Control).Font.Size
    else
      Continue;

    PercentString := Copy(FloatToStr(Percent * 100), 1, 3) + '%';
    NewFontSize := Round(PreviousFontSize * Percent);
    NewControlWidth := Round((Control.Width * NewFontSize) / PreviousFontSize)
    NewControlHeight := Round(Control.Height * Percent);

    if Control is TButton then
      TButton(Control).Font.Size := NewFontSize
    else if Control is TCheckBox then
      TCheckBox(Control).Font.Size := NewFontSize
    else if Control is TComboBox then
      TComboBox(Control).Font.Size := NewFontSize
    else if Control is TEdit then
      TEdit(Control).Font.Size := NewFontSize
    else if Control is TForm then
      TForm(Control).Font.Size := NewFontSize
    else if Control is TLabel then
      TLabel(Control).Font.Size := NewFontSize
    else if Control is TListBox then
      TListBox(Control).Font.Size := NewFontSize
    else if Control is TMemo then
      TMemo(Control).Font.Size := NewFontSize
    else if Control is TNewCheckListBox then
      TNewCheckListBox(Control).Font.Size := NewFontSize
    else if Control is TNewStaticText then
      TNewStaticText(Control).Font.Size := NewFontSize
    else if Control is TPanel then
      TPanel(Control).Font.Size := NewFontSize
    else if Control is TPasswordEdit then
      TPasswordEdit(Control).Font.Size := NewFontSize
    else if Control is TRadioButton then
      TRadioButton(Control).Font.Size := NewFontSize
    else
      Continue;

    Control.Width := NewControlWidth;
    Control.Height := NewControlHeight;
  end;
end;

procedure InitializeWizard();
var
  Pages: array of Integer;
  Page: TWizardPage;
  Index: Integer;
  Percent: Double;
begin
  Pages := [wpWelcome, wpLicense, wpPassword, wpInfoBefore,
            wpUserInfo, wpSelectDir, wpSelectComponents,
            wpSelectProgramGroup, wpSelectTasks, wpReady,
            wpPreparing, wpInstalling, wpInfoAfter, wpFinished];

  for Index := 0 to Length(Pages) - 1 do
  begin
    Page := PageFromID(Pages[Index])
    Percent := 1.80  // +50% size increment
    ChangeFontSize(Page, Percent);
  end;
end;

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

Однако, как отмечается в вопросе, директива DialogFontSize также увеличивает размер формы пропорционально размеру шрифта, что может привести к тому, что форма станет

Создано по материалам из источника по ссылке.

В статье рассматривается изменение размера шрифта во всем Installer InnoSetup пропорционально, чтобы изменить размер шрифта для всех текстовых контролов на страницах мастера.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Инсталяция ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 01:10:48/0.0030560493469238/0