![]() |
![]() ![]() ![]() ![]() |
|
Изменить шрифт всех контролов во время выполненияDelphi , Графика и Игры , ШрифтыИзменить шрифт всех контролов во время выполнения
Оформил: DeeCo
{
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.
Код, предоставленный ниже, изменяет шрифт для всех контролов на форме в реальном времени, итерируя по каждому контролю, проверяя, имеет ли он свой собственный шрифт, и если нет, то устанавливает его в тот же шрифт, что у родительской формы. Рассмотрим, как работает код:
Вот предложенная альтернативная решение: Вместо ручного итерирования по каждому контролю на форме можно использовать объект В этом коде мы определили новую процедуру Затем в обработчике события Этот код более эффективен и легче поддерживать, чем оригинальное решение, потому что не требует ручного итерирования по контролам на форме. Изменить шрифт всех контролов в проекте можно при выполнении, изменив свойство Form.Font или перебрав все контролы на форме и установив шрифт для каждого из них. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||