【问题标题】:Change font in application在应用程序中更改字体
【发布时间】:2015-12-19 05:25:07
【问题描述】:

有没有什么简单的方法可以改变整个程序的字体?我有桌面 fmx (delphi xe7) 应用程序,它使用样式,但对于某些用户来说,配置这个东西是必要的。

我知道它可能看起来像这样:

LabelReceptSign.StyledSettings := [];
LabelReceptSign.FontColor:= ComboColorBox1.Color;
LabelReceptSign.Font.Size:= SpinBoxReceptFontsize.Value;
LabelReceptSign.Font.Family:= ComboBoxFontRec.Selected.Text;

对于每个组件,但这将是一个非常庞大的代码!使用带有名称迭代生成 'label' + inttost(i) 的 FindComponent 过程,我可以使它更短,但无论如何它都是非常糟糕的方法。

有什么建议吗?

【问题讨论】:

  • 出于好奇,为什么样式不适合您的情况?
  • 嗯,7% 的用户投票赞成在该计划中获得这个机会。
  • 您可以考虑研究样式挂钩。这允许您自定义控件的绘制方式。见theroadtodelphi.wordpress.com/2012/02/06/…。

标签: delphi fonts firemonkey


【解决方案1】:

好吧,我写了代码,它可以工作,除了组合编辑和单选按钮 - 我不知道为什么,但在另一个过程中更改它们。另外我不知道如何处理mainmenu。该过程仅更改弹出菜单项。

Procedure FontchangeApply;
   var
i : integer;
begin

if Programfont.usefont = true  then begin

 with form2 do begin
   for i := 0 to form2.ComponentCount-1 do begin
    try
       if  ContainsText(Components[i].Name, 'label') then begin
             (Components[i] as TLabel).StyledSettings:= [];
                   (Components[i] as TLabel).font.Size:=    programfont.programfont.Size;
                (Components[i] as TLabel).font.family:= programfont.programfont.family;
                (Components[i] as TLabel).fontcolor:= programfont.programfontcolor;
          end;

          if  ContainsText(Components[i].Name, 'stringgrid') then begin
              (Components[i] as Tstringgrid).StyledSettings:= [];
              (Components[i] as Tstringgrid).TextSettings.font.Size:= programfont.programfont.Size;
              (Components[i] as Tstringgrid).TextSettings.font.family:= programfont.programfont.family;
              (Components[i] as Tstringgrid).TextSettings.fontcolor:= programfont.programfontcolor;
           end;

          if  ContainsText(Components[i].Name, 'button') then begin
           (Components[i] as Tbutton).StyledSettings:= [];
           (Components[i] as Tbutton).font.Size:= programfont.programfont.Size;
           (Components[i] as Tbutton).font.family:= programfont.programfont.family;
           (Components[i] as Tbutton).fontcolor:= programfont.programfontcolor;
          end;

         if  ContainsText(Components[i].Name, 'Menuitem') then begin
           (Components[i] as TMenuitem).StyledSettings:= [];
           (Components[i] as TMenuitem).font.Size:= programfont.programfont.Size;
           (Components[i] as TMenuitem).font.family:= programfont.programfont.family;
           (Components[i] as TMenuitem).fontcolor:= programfont.programfontcolor;
         end;

        if  ContainsText(Components[i].Name, 'Tabitem') then begin
           (Components[i] as TTabitem).StyledSettings:= [];
           (Components[i] as TTabitem).font.Size:= programfont.programfont.Size;
           (Components[i] as TTabitem).font.family:= programfont.programfont.family;
           (Components[i] as TTabitem).fontcolor:= programfont.programfontcolor;
        end;

        if  ContainsText(Components[i].Name, 'DateEdit') then begin
           (Components[i] as TDateEdit).StyledSettings:= [];
           (Components[i] as TDateEdit).font.Size:= programfont.programfont.Size;
           (Components[i] as TDateEdit).font.family:= programfont.programfont.family;
           (Components[i] as TDateEdit).fontcolor:= programfont.programfontcolor;
        end;

        if  ContainsText(Components[i].Name, 'TimeEdit') then begin
           (Components[i] as TTimeEdit).StyledSettings:= [];
           (Components[i] as TTimeEdit).font.Size:= programfont.programfont.Size;
           (Components[i] as TTimeEdit).font.family:= programfont.programfont.family;
           (Components[i] as TTimeEdit).fontcolor:= programfont.programfontcolor;
        end;

        if  ContainsText(Components[i].Name, 'Spinbox') then begin
           (Components[i] as TSpinbox).StyledSettings:= [];
           (Components[i] as TSpinbox).font.Size:= programfont.programfont.Size;
           (Components[i] as TSpinbox).font.family:= programfont.programfont.family;
           (Components[i] as TSpinbox).fontcolor:= programfont.programfontcolor;
        end;

        if  ContainsText(Components[i].Name, 'Memo') then begin
           (Components[i] as TMemo).StyledSettings:= [];
           (Components[i] as TMemo).font.Size:= programfont.programfont.Size;
           (Components[i] as TMemo).font.family:= programfont.programfont.family;
           (Components[i] as TMemo).fontcolor:= programfont.programfontcolor;
        end;

        if  ContainsText(Components[i].Name, 'Checkbox') then begin
           (Components[i] as TCheckbox).StyledSettings:= [];
           (Components[i] as TCheckbox).font.Size:= programfont.programfont.Size;
           (Components[i] as TCheckbox).font.family:= programfont.programfont.family;
           (Components[i] as TCheckbox).fontcolor:= programfont.programfontcolor;
        end;

        if  ContainsText(Components[i].Name, 'Edit') then begin
           (Components[i] as TEdit).StyledSettings:= [];
           (Components[i] as TEdit).font.Size:= programfont.programfont.Size;
           (Components[i] as TEdit).font.family:= programfont.programfont.family;
           (Components[i] as TEdit).fontcolor:= programfont.programfontcolor;
        end;

       if  ContainsText(Components[i].ClassName, 'ComboEdit') then begin
             //showmessage('nashel comboedit');
           (Components[i] as TCustomComboEdit).StyledSettings:= [];
           (Components[i] as TCustomComboEdit).font.Size:= programfont.programfont.Size;
           (Components[i] as TEdit).font.family:= programfont.programfont.family;
           (Components[i] as TEdit).fontcolor:= programfont.programfontcolor;
        end;

        if  ContainsText(Components[i].Name, 'GroupBox') then begin
           //showmessage('nashel groupbox');
           (Components[i] as TGroupBox).StyledSettings:= [];
           (Components[i] as TGroupBox).font.Size:= programfont.programfont.Size;
           (Components[i] as TGroupBox).font.family:= programfont.programfont.family;
           (Components[i] as TGroupBox).fontcolor:= programfont.programfontcolor;
        end;

        if  ContainsText(Components[i].Name, 'RadioButton') then begin
            showmessage('nashel radiobutton');
           (Components[i] as TRadiobutton).StyledSettings:= [];
           (Components[i] as TRadiobutton).textsettings.font.Size:= programfont.programfont.Size;
           (Components[i] as TRadiobutton).textsettings.font.family:= programfont.programfont.family;
           (Components[i] as TRadiobutton).textsettings.fontcolor:= programfont.programfontcolor;
        end;

      except
        showmessage('Error in'+ Components[i].Name);
       end;
     end;

   end;
   end;
  end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-11
    • 2014-01-16
    • 2017-06-21
    • 2012-05-23
    • 1970-01-01
    • 2023-03-18
    • 2011-11-20
    • 1970-01-01
    相关资源
    最近更新 更多