Изменение размера шрифта всей формы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Изменение размера шрифта всей формы

Сообщение lordgray » 04.01.2024 02:02:15

Здравствуйте! Решил сделать, как в браузерах, Ctrl+"+" - увеличивает шрифт, Ctrl+"-" - уменьшает. При переходе на Lazarus 3.0, перестало работать. На 2.6 работало. И так, подробности:
Windows 7x64, Lazarus 3.0, компиляция под x64.
Что и как делал.
Поскольку форм много, объявил:
Код: Выделить всё
  TMyForm = class(TForm)
  protected
    ZoomActionList: TActionList;
    fZoomIn: TAction;
    fZoomOut: TAction;
    fZoomDef: TAction;
    procedure OnZoomDef(Sender: TObject);
    procedure OnZoomIn(Sender: TObject);
    procedure OnZoomOut(Sender: TObject);
  public
    constructor Create(TheOwner: TComponent); override;
  end;

constructor TMyForm.Create(TheOwner: TComponent);
begin
  inherited;
  ZoomActionList := TActionList.Create(Self);
  fZoomIn := TAction.Create(Self);
  fZoomIn.OnExecute := @OnZoomIn;
  fZoomIn.ShortCut := KeyToShortCut(vk_Add, [ssCtrl]);//'Ctrl+NumPlus';
  fZoomIn.ActionList := ZoomActionList;

  fZoomOut := TAction.Create(Self);
  fZoomOut.OnExecute := @OnZoomOut;
  fZoomOut.ShortCut := KeyToShortCut(VK_SUBTRACT, [ssCtrl]);//'Ctrl+NumMinus';
  fZoomOut.ActionList := ZoomActionList;

  fZoomDef := TAction.Create(Self);
  fZoomDef.OnExecute := @OnZoomDef;
  fZoomDef.ShortCut := KeyToShortCut(VK_MULTIPLY, [ssCtrl]);//'Ctrl+Num*';
  fZoomDef.ActionList := ZoomActionList;
end;   

procedure TMyForm.OnZoomIn(Sender: TObject);
begin
  if Font.Size < 24 then
  begin
    if Font.Size < 8 then Font.Size := 8 else Font.Size := Font.Size + 1;
    Caption := Format('%s: %d', [Font.Name, font.Size]);//для отладки
    if Assigned(OnResize) then OnResize(Sender);
  end;
end;
...

Ну и дальше все формы породил от TMyForm.
ParentFont := True - у всех компонентов формы. За счет этого, меняя шрифт формы, он менялся у всех компонентов. Сейчас не меняется.

Как исправить положение?
lordgray
новенький
 
Сообщения: 60
Зарегистрирован: 10.10.2010 00:19:11

Re: Изменение размера шрифта всей формы

Сообщение sts » 05.01.2024 18:55:33

не удивлюсь что это следствие какого нибудь исправления ошибок в работе с системными настройками, подозреваю у всех форм надо проставить какое нибудь свойство типа zoom... или как там его
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Изменение размера шрифта всей формы

Сообщение lordgray » 07.01.2024 00:54:38

sts писал(а):подозреваю у всех форм надо проставить какое нибудь свойство типа zoom

Увы, все сложнее. В системе стоит размер шрифта по умолчанию - 9. У объекта Font.Size = 0, то есть надо использовать системные настройки. Так вот, при первом нажатии Ctrl+"+", обработчик экшина 0 меняет на 8, т.е. шрифт уменьшается, и это отображается на экране. А вот все последующие изменения, не отображаются. Не знаю, может в обработчик надо воткнуть какой нибудь Self.Update или еще что? Именно Update пробовал, не помогло. Более того скажу, иногда работает, но настолько редко, что не могу вычислить зависимость.
lordgray
новенький
 
Сообщения: 60
Зарегистрирован: 10.10.2010 00:19:11

Re: Изменение размера шрифта всей формы

Сообщение xchgeaxeax » 07.01.2024 01:35:28

А Invalidate тоже не помогает?
xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

Re: Изменение размера шрифта всей формы

Сообщение Vlad04 » 09.01.2024 17:59:46

ДВС. Я попадал на такой баг: писал проект и у всех компонентов на форме в среде устанавливал ParentFont = TRUE. При этом правил проект на двух компах с WinXP и Win 8 32bit. Так вот при переносе исходников с одного компа на другой значения ParentFont сбрасывалось. Была версия, что это связано с изменением размера текста в свойствах экрана на Win 8/10.
Навсегда избавился от этой проблемы написав процедуру, которая перебирает все контролы и устанавливает значение ParentFont.
Аватара пользователя
Vlad04
новенький
 
Сообщения: 79
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Re: Изменение размера шрифта всей формы

Сообщение lordgray » 14.01.2024 23:43:52

xchgeaxeax писал(а):А Invalidate тоже не помогает?

Не, не помогло. Даже вставил:
Код: Выделить всё
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

Непомогло. Видно по морганию, что все перерисовывается, а размеры шрифтов и компонентов не меняются
lordgray
новенький
 
Сообщения: 60
Зарегистрирован: 10.10.2010 00:19:11


Вернуться в Lazarus

Кто сейчас на конференции

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

Рейтинг@Mail.ru