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