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