VCL 스타일 현재 읽기 및 사용자 정의 스타일, 색상에서 전체 글꼴 데이터를 적용하지 않습니다.
해킹을 통해 사용자 정의 스타일로 완전한 글꼴 정보에 액세스 할 수 있지만 수동으로 컨트롤에 글꼴을 적용하거나 ParentFont
양식 속성을 사용할 수 있습니다. 사용자 정의 스타일에 저장된 글꼴에 액세스 할 수 있습니다 코드를 다음과 같이
은 (XE4에서 테스트하지만, 기본적인 아이디어는 약간의 차이가있을 경우, 다른 델파이 버전에 적용 할 수 있습니다)
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.
그것은 당신의 질문에서 명확하지 않다 : 비트 맵 스타일 디자이너에서 글꼴 주소를 지정하거나 스타일이 포함 된 리소스를 만들어 해당 스타일 중 하나를 응용 프로그램 내의 컨트롤에 적용하려고 시도한 적이 있습니까? (예 : 일반 텍스트 편집기에서 해당 스타일을 편집 할 수있는 곳) – Alnitak
MetropolisUIBlack.vsf 스타일을 수정하고 프로젝트 설정에서 정의한 후에 응용 프로그램을 다시 컴파일했습니다. 문제는 글꼴이 데모 양식에서도 고려되지 않는다는 것입니다. –
스타일을 적용 했습니까? (재 컴파일은 스타일을 적용하지 않지만 생각할 수도 있습니다). .vsf 스타일의 다른 것이 나오는지 보려고 했습니까? (즉, 무시되는 폰트일까요? 아니면 스타일 파일의 다른 모든 것들도 무시되는 것입니까?) – Alnitak