Delphi 在位图样式设计器中更改字体

Delphi 在位图样式设计器中更改字体,delphi,user-interface,fonts,styles,themes,Delphi,User Interface,Fonts,Styles,Themes,Delphi XE7提供了“位图样式设计器”工具(“工具>位图样式设计器”),可用于编辑和创建metro主题应用程序的样式。更改按钮、复选框和标签的图形和颜色非常有效,而且看起来非常漂亮。 但是如何更改字体设置呢?更准确地说:我该怎么做才能让字体设置在我的应用程序上生效 当然有一个字体部分,可以在其中编辑自定义字体样式、族、大小等,但这些设置没有影响。但是我可以成功地更改控件的颜色 位图样式设计器还支持预览模式。这将显示一个带有自定义控件的窗口。甚至没有使用自定义字体。对于此窗口,我无法应用任何

Delphi XE7提供了“位图样式设计器”工具(“工具>位图样式设计器”),可用于编辑和创建metro主题应用程序的样式。更改按钮、复选框和标签的图形和颜色非常有效,而且看起来非常漂亮。 但是如何更改字体设置呢?更准确地说:我该怎么做才能让字体设置在我的应用程序上生效

当然有一个字体部分,可以在其中编辑自定义字体样式、族、大小等,但这些设置没有影响。但是我可以成功地更改控件的颜色

位图样式设计器还支持预览模式。这将显示一个带有自定义控件的窗口。甚至没有使用自定义字体。对于此窗口,我无法应用任何设置,如
ParentFont:=True
StyleElements:=StyleElements+[seFont]

但我可以在我自己的应用程序中更改这些属性,在其中应用自定义样式。不幸的是,结果保持不变


最好的祝愿

Vcl样式当前不读取和应用自定义样式中的完整字体数据,只读取颜色

不过,通过一些黑客攻击,您可以访问自定义样式的完整字体信息,但您必须手动将字体应用于控件,或者您可以使用表单的
ParentFont
属性

通过以下代码,您可以访问存储在自定义样式中的字体(在XE4中进行了测试,但如果存在一些差异,则可以将基本思想应用于其他Delphi版本)


您的问题并不清楚:您是否只尝试在位图样式设计器中处理字体,或者您是否在中创建了具有样式的资源,并尝试将其中一种样式应用于应用程序中的控件?(例如,可以在普通文本编辑器中编辑此类样式)我修改了MetropolisUIBlack.vsf样式,并在项目设置中定义了它,然后重新编译了应用程序。问题是,演示表单中甚至没有考虑字体。您应用了样式吗?(重新编译不会应用该样式,尽管您可能会这样认为)。您是否尝试过查看您的.vsf样式中是否还有其他内容?(即,是否只有字体被忽略,或者样式文件中的所有其他内容也被忽略?)我使用
TStyleManager.TrySetStyle(cStyle)应用样式在我的dpr文件中。以及我之前提到的所有控件都按照我希望的vsf样式进行样式化。字体(家族、大小、颜色)是唯一不适用的。谢谢你的回答,Dalija。实际上,通过在MainForm中定义应用程序的默认字体,并通过激活
ParentFont
属性来设置每个子控件的样式,可以很好地为应用程序配置默认字体。不幸的是,设置应用程序上下文或应用程序菜单的样式可能并不容易。您可以使用
屏幕
属性
HintFont
icont
MenuFont
MessageFont
CaptionFont
更改其他应用程序字体的外观谢谢!这对我的TPopUpMenus有效。也许还应该提到,有必要设置属性
OwnerDraw:=True
,以使
Screen.MenuFont
属性生效。通过更改字体大小,无法正确导出菜单项的高度。这个问题可以通过使用TMenuItem的
OnMeasureItem
-事件来解决。@DalijaPrasnikar我创建了一个QC请求,如果人们不喜欢这些黑客行为,请投票:-请随时使用此链接更新您的答案。@JamesJohnston感谢您的报告,投票。我认为在评论中链接到QP报告就足够了。您也可以将其发布在以获得更多的可见性。在那里,它将比埋葬在这里吸引更多的关注和选票。
unit StyleFonts;

interface

uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Classes,
  System.Types,
  System.UITypes,
  System.Zlib,
  Vcl.Consts,
  Vcl.Graphics,
  Vcl.Controls,
  Vcl.Forms,
  Vcl.ImgList,
  Vcl.GraphUtil,
  Vcl.Styles,
  Vcl.Themes;

function GetStyleFont(Font: TStyleFont): TFont;

implementation

// use files from source\vcl
{$I StyleUtils.inc}
{$I StyleAPI.inc}

var
  SystemFont: TFont;

procedure InitializeSystemFont;
var
  NonClientMetrics: TNonClientMetrics;
begin
  SystemFont := TFont.Create;
  FillChar(NonClientMetrics, SizeOf(NonClientMetrics), 0);
  // following function will fill up cbSize with correct size for XP system
  NonClientMetrics.cbSize := TNonClientMetrics.SizeOf;
  if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then
    SystemFont.Handle := CreateFontIndirect(NonClientMetrics.lfMessageFont)
end;

type
  TStyleHelper = class helper for TCustomStyle
  public
    function GetSource: TObject; { TseSkin }
  end;

function TStyleHelper.GetSource: TObject;
begin
  Result := Self.FSource;
end;

function GetStyleFont(Font: TStyleFont): TFont;
var
  LStyle: TCustomStyle;
  FSource: TObject;
  SeFont: TSeStyleFont;
begin
  if TStyleManager.IsCustomStyleActive then
    begin
      LStyle := TCustomStyle(TStyleManager.ActiveStyle);
      FSource := LStyle.GetSource;
      // case based on Vcl.Styles TCustomStyle.DoGetStyleFontColor
      case Font of
        sfButtonTextDisabled: Result := TSeStyle(FSource).Fonts[ktfButtonTextDisabled];
        sfButtonTextFocused: Result := TSeStyle(FSource).Fonts[ktfButtonTextFocused];
        sfButtonTextHot: Result := TSeStyle(FSource).Fonts[ktfButtonTextHot];
        sfButtonTextNormal: Result := TSeStyle(FSource).Fonts[ktfButtonTextNormal];
        sfButtonTextPressed: Result := TSeStyle(FSource).Fonts[ktfButtonTextPressed];
        sfCaptionTextInactive: Result := TSeStyle(FSource).Fonts[ktfCaptionTextInactive];
        sfCaptionTextNormal: Result := TSeStyle(FSource).Fonts[ktfCaptionTextNormal];
        sfCategoryPanelGroupHeaderHot: Result := TSeStyle(FSource).Fonts[ktfCategoryPanelGroupHeaderHot];
        sfCategoryPanelGroupHeaderNormal: Result := TSeStyle(FSource).Fonts[ktfCategoryPanelGroupHeaderNormal];
        sfCatgeoryButtonsCategoryNormal: Result := TSeStyle(FSource).Fonts[ktfCatgeoryButtonsCategoryNormal];
        sfCatgeoryButtonsCategorySelected: Result := TSeStyle(FSource).Fonts[ktfCatgeoryButtonsCategorySelected];
        sfCatgeoryButtonsHot: Result := TSeStyle(FSource).Fonts[ktfCatgeoryButtonsHot];
        sfCatgeoryButtonsNormal: Result := TSeStyle(FSource).Fonts[ktfCatgeoryButtonsNormal];
        sfCatgeoryButtonsSelected: Result := TSeStyle(FSource).Fonts[ktfCatgeoryButtonsSelected];
        sfCheckBoxTextDisabled: Result := TSeStyle(FSource).Fonts[ktfCheckBoxTextDisabled];
        sfCheckBoxTextFocused: Result := TSeStyle(FSource).Fonts[ktfCheckBoxTextFocused];
        sfCheckBoxTextHot: Result := TSeStyle(FSource).Fonts[ktfCheckBoxTextHot];
        sfCheckBoxTextNormal: Result := TSeStyle(FSource).Fonts[ktfCheckBoxTextNormal];
        sfCheckBoxTextPressed: Result := TSeStyle(FSource).Fonts[ktfCheckBoxTextPressed];
        sfComboBoxItemDisabled: Result := TSeStyle(FSource).Fonts[ktfComboBoxItemDisabled];
        sfComboBoxItemFocused: Result := TSeStyle(FSource).Fonts[ktfComboBoxItemFocused];
        sfComboBoxItemHot: Result := TSeStyle(FSource).Fonts[ktfComboBoxItemHot];
        sfComboBoxItemNormal: Result := TSeStyle(FSource).Fonts[ktfComboBoxItemNormal];
        sfComboBoxItemSelected: Result := TSeStyle(FSource).Fonts[ktfComboBoxItemSelected];
        sfEditBoxTextDisabled: Result := TSeStyle(FSource).Fonts[ktfEditBoxTextDisabled];
        sfEditBoxTextFocused: Result := TSeStyle(FSource).Fonts[ktfEditBoxTextFocused];
        sfEditBoxTextHot: Result := TSeStyle(FSource).Fonts[ktfEditBoxTextHot];
        sfEditBoxTextNormal: Result := TSeStyle(FSource).Fonts[ktfEditBoxTextNormal];
        sfEditBoxTextSelected: Result := TSeStyle(FSource).Fonts[ktfEditBoxTextSelected];
        sfGridItemFixedHot: Result := TSeStyle(FSource).Fonts[ktfGridItemFixedHot];
        sfGridItemFixedNormal: Result := TSeStyle(FSource).Fonts[ktfGridItemFixedNormal];
        sfGridItemFixedPressed: Result := TSeStyle(FSource).Fonts[ktfGridItemFixedPressed];
        sfGridItemNormal: Result := TSeStyle(FSource).Fonts[ktfGridItemNormal];
        sfGridItemSelected: Result := TSeStyle(FSource).Fonts[ktfGridItemSelected];
        sfGroupBoxTextDisabled: Result := TSeStyle(FSource).Fonts[ktfGroupBoxTextDisabled];
        sfGroupBoxTextNormal: Result := TSeStyle(FSource).Fonts[ktfGroupBoxTextNormal];
        sfHeaderSectionTextDisabled: Result := TSeStyle(FSource).Fonts[ktfHeaderSectionTextDisabled];
        sfHeaderSectionTextHot: Result := TSeStyle(FSource).Fonts[ktfHeaderSectionTextHot];
        sfHeaderSectionTextNormal: Result := TSeStyle(FSource).Fonts[ktfHeaderSectionTextNormal];
        sfHeaderSectionTextPressed: Result := TSeStyle(FSource).Fonts[ktfHeaderSectionTextPressed];
        sfListItemTextDisabled: Result := TSeStyle(FSource).Fonts[ktfListItemTextDisabled];
        sfListItemTextFocused: Result := TSeStyle(FSource).Fonts[ktfListItemTextFocused];
        sfListItemTextHot: Result := TSeStyle(FSource).Fonts[ktfListItemTextHot];
        sfListItemTextNormal: Result := TSeStyle(FSource).Fonts[ktfListItemTextNormal];
        sfListItemTextSelected: Result := TSeStyle(FSource).Fonts[ktfListItemTextSelected];
        sfMenuItemTextDisabled: Result := TSeStyle(FSource).Fonts[ktfMenuItemTextDisabled];
        sfMenuItemTextHot: Result := TSeStyle(FSource).Fonts[ktfMenuItemTextHot];
        sfMenuItemTextNormal: Result := TSeStyle(FSource).Fonts[ktfMenuItemTextNormal];
        sfMenuItemTextSelected: Result := TSeStyle(FSource).Fonts[ktfMenuItemTextSelected];
        sfPanelTextDisabled: Result := TSeStyle(FSource).Fonts[ktfPanelTextDisabled];
        sfPanelTextNormal: Result := TSeStyle(FSource).Fonts[ktfPanelTextNormal];
        sfPopupMenuItemTextDisabled: Result := TSeStyle(FSource).Fonts[ktfPopupMenuItemTextDisabled];
        sfPopupMenuItemTextHot: Result := TSeStyle(FSource).Fonts[ktfPopupMenuItemTextHot];
        sfPopupMenuItemTextNormal: Result := TSeStyle(FSource).Fonts[ktfPopupMenuItemTextNormal];
        sfPopupMenuItemTextSelected: Result := TSeStyle(FSource).Fonts[ktfPopupMenuItemTextSelected];
        sfRadioButtonTextDisabled: Result := TSeStyle(FSource).Fonts[ktfRadioButtonTextDisabled];
        sfRadioButtonTextFocused: Result := TSeStyle(FSource).Fonts[ktfRadioButtonTextFocused];
        sfRadioButtonTextHot: Result := TSeStyle(FSource).Fonts[ktfRadioButtonTextHot];
        sfRadioButtonTextNormal: Result := TSeStyle(FSource).Fonts[ktfRadioButtonTextNormal];
        sfRadioButtonTextPressed: Result := TSeStyle(FSource).Fonts[ktfRadioButtonTextPressed];
        sfSmCaptionTextInactive: Result := TSeStyle(FSource).Fonts[ktfSmCaptionTextInactive];
        sfSmCaptionTextNormal: Result := TSeStyle(FSource).Fonts[ktfSmCaptionTextNormal];
        sfStatusPanelTextDisabled: Result := TSeStyle(FSource).Fonts[ktfStatusPanelTextDisabled];
        sfStatusPanelTextNormal: Result := TSeStyle(FSource).Fonts[ktfStatusPanelTextNormal];
        sfTabTextActiveDisabled: Result := TSeStyle(FSource).Fonts[ktfTabTextActiveDisabled];
        sfTabTextActiveHot: Result := TSeStyle(FSource).Fonts[ktfTabTextActiveHot];
        sfTabTextActiveNormal: Result := TSeStyle(FSource).Fonts[ktfTabTextActiveNormal];
        sfTabTextInactiveDisabled: Result := TSeStyle(FSource).Fonts[ktfTabTextInactiveDisabled];
        sfTabTextInactiveHot: Result := TSeStyle(FSource).Fonts[ktfTabTextInactiveHot];
        sfTabTextInactiveNormal: Result := TSeStyle(FSource).Fonts[ktfTabTextInactiveNormal];
        sfTextLabelDisabled: Result := TSeStyle(FSource).Fonts[ktfStaticTextDisabled];
        sfTextLabelFocused: Result := TSeStyle(FSource).Fonts[ktfStaticTextFocused];
        sfTextLabelHot: Result := TSeStyle(FSource).Fonts[ktfStaticTextHot];
        sfTextLabelNormal: Result := TSeStyle(FSource).Fonts[ktfStaticTextNormal];
        sfToolItemTextDisabled: Result := TSeStyle(FSource).Fonts[ktfToolItemTextDisabled];
        sfToolItemTextHot: Result := TSeStyle(FSource).Fonts[ktfToolItemTextHot];
        sfToolItemTextNormal: Result := TSeStyle(FSource).Fonts[ktfToolItemTextNormal];
        sfToolItemTextSelected: Result := TSeStyle(FSource).Fonts[ktfToolItemTextSelected];
        sfTreeItemTextDisabled: Result := TSeStyle(FSource).Fonts[ktfTreeItemTextDisabled];
        sfTreeItemTextFocused: Result := TSeStyle(FSource).Fonts[ktfTreeItemTextFocused];
        sfTreeItemTextHot: Result := TSeStyle(FSource).Fonts[ktfTreeItemTextHot];
        sfTreeItemTextNormal: Result := TSeStyle(FSource).Fonts[ktfTreeItemTextNormal];
        sfTreeItemTextSelected: Result := TSeStyle(FSource).Fonts[ktfTreeItemTextSelected];
        sfWindowTextDisabled: Result := TSeStyle(FSource).Fonts[ktfWindowTextDisabled];
        sfWindowTextNormal: Result := TSeStyle(FSource).Fonts[ktfWindowTextNormal];
        else Result := SystemFont;
      end;
    end
  else Result := SystemFont;
end;

initialization

  InitializeSystemFont;

finalization

  SystemFont.Free;

end.