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

Изменить шрифт всех контролов во время выполнения

Delphi , Графика и Игры , Шрифты

Изменить шрифт всех контролов во время выполнения

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
Question: 
  What is the most easy way to set a same font name to all controls 
  in project in run time? 

Answer: 
  By default all controls have ParentFont = true, so if you did not change 
  that  for specific controls you could just change the forms Font 
  property, e.g. in code attached to the Screen.OnActiveFormChange event. 
  If you cannot rely on all controls having Parentfont = true you would 
  have to loop over all controls on the form and set the font property for 
  each or at least for those that have ParentFont set to false. You can 
  use the routines from unit TypInfo for that, they allow you to access 
  published properties by name. The code, again sitting in a handler for 
  Screen.onActiveFormChange, would be something like this: 

  ModifyFontsFor( Screen.ActiveControl ); 

where 
}

 procedure ModifyFontsFor(ctrl: TWinControl);
   procedure ModifyFont(ctrl: TControl);
   var
     f: TFont;
   begin
     if IsPublishedProp(ctrl, 'Parentfont')
       and (GetOrdProp(ctrl, 'Parentfont') = Ord(false))
       and IsPublishedProp(ctrl, 'font')
       then begin
       f := TFont(GetObjectProp(ctrl, 'font', TFont));
       f.Name := 'Symbol';
     end;
   end;
 var
   i: Integer;
 begin
   ModifyFont(ctrl);
   for i := 0 to ctrl.controlcount - 1 do
     if ctrl.controls[i] is Twincontrol then
       ModifyFontsfor(TWincontrol(ctrl.controls[i]))
     else
       Modifyfont(ctrl.controls[i]);
 end;

 procedure TForm1.Button2Click(Sender: TObject);
 begin
   Modifyfontsfor(self);
 end;

 // Remember to add TypInfo to your uses clause. 

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

Рассмотрим, как работает код:

  1. Процедура ModifyFontsFor вызывается для каждого контрола на форме.
  2. Внутри этой процедуры проверяется, имеет ли контроль свой собственный шрифт (ParentFont = False) и если да, то модифицируется этот шрифт, чтобы он соответствовал шрифту родительской формы.
  3. Если контроль не имеет своего собственного шрифта, то просто копирует шрифт из родительской формы.

Вот предложенная альтернативная решение:

Вместо ручного итерирования по каждому контролю на форме можно использовать объект TControlCollection, предоставленный Delphi, для итерирования по всем контролам на форме. Это делает код более эффективным и легче поддерживать.

procedure ModifyFontsFor(ACtrl: TWinControl);
begin
  if ACtrl is TControl then
     (AControl as TControl).Font := Screen.ActiveForm.Font;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  for i := 0 to Controls.Count - 1 do
    ModifyFontsFor(Controls[i]);
end;

В этом коде мы определили новую процедуру ModifyFontsFor, которая принимает аргументом TWinControl. Внутри этой процедуры проверяется, является ли контроль типа TControl. Если это так, то устанавливается его шрифт в соответствие с шрифтом активной формы.

Затем в обработчике события Button2Click мы итерируем по всем контролам на форме с помощью свойства Controls.Count и синтаксиса Controls[i]. Для каждого контрола вызываем процедуру ModifyFontsFor, чтобы модифицировать его шрифт.

Этот код более эффективен и легче поддерживать, чем оригинальное решение, потому что не требует ручного итерирования по контролам на форме.

Изменить шрифт всех контролов в проекте можно при выполнении, изменив свойство Form.Font или перебрав все контролы на форме и установив шрифт для каждого из них.


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

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




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


:: Главная :: Шрифты ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-03 05:16:20/0.0033731460571289/0