在位图样式设计器中更改字体 [英] Change Font in Bitmap Style Designer

查看:83
本文介绍了在位图样式设计器中更改字体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Delphi XE7提供了位图样式设计器工具(工具>位图样式设计器),该工具可用于为都市主题应用程序编辑和创建样式。更改按钮,复选框和标签的图形和颜色可以正常工作。
但是如何更改字体设置?更精确地说:如何使字体设置对我的应用程序生效?

Delphi XE7 provides the "Bitmap Style Designer" tool ('Tools > Bitmap Style Designer') which can be used to edit and create styles for your metro themed applications. Changing graphics and colors for buttons, checkboxes and labels works and looks pretty fly. But how can I change the Font Settings? To be more precise: What can I do to let the font settings take effect on my application?

当然有一个字体部分,可以在其中编辑自定义字体样式,-families和-sizes等,但是这些设置没有影响。但我可以在那里成功更改控件的颜色。

Of course there's a Fonts-Section where custom font-styles, -families, -sizes and so on can be edited, but those setting have no impact. But I can successfully change the color of a control there.

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

The Bitmap Style Designer also supports a Preview mode. This displays a window with the customized controls. Even there no custom fonts are used. For this window I am not able to apply any settings like ParentFont := True or StyleElements := StyleElements + [seFont].

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

But I can change those properties in my own application where I apply the custom style. Unfortunately the result stays the same.

最诚挚的问候

推荐答案

Vcl样式目前无法读取和应用自定义样式的完整字体数据,而只能读取颜色。

Vcl Styles currently do not read and apply full font data from custom style, only color.

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

However with some hacking you can access complete font information in custom style, but you will have to apply fonts to controls manually, or you can use ParentFont property of form.

使用以下代码,您可以访问字体以自定义样式存储(已在XE4中进行了测试,但是如果有一些区别,则可以将其应用于其他Delphi版本)

With following code you can access fonts stored in custom styles (tested in XE4, but basic idea can be applied to other Delphi versions, if there are some differences)

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.

这篇关于在位图样式设计器中更改字体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆