Type TSDocxFont = Class(TSVbaBase) Uses TSDocxEnumerations; public Function Init(pr); Function Apply();virtual; Function ReWrite(pr);virtual; protected pr_; color_index_; color_; public // Methods Function Grow();virtual; Function Reset();virtual; Function SetAsTemplateDefault();virtual; Function Shrink();virtual; // Properties property AllCaps read ReadAllCaps write WriteAllCaps; property Bold read ReadBold write WriteBold; property BoldBi read ReadBoldBi write WriteBoldBi; property Borders read ReadBorders; property Color read ReadColor write WriteColor; property ColorIndex read ReadColorIndex write WriteColorIndex; property ColorIndexBi read ReadColorIndexBi write WriteColorIndexBi; property ContextualAlternates read ReadContextualAlternates write WriteContextualAlternates; property DiacriticColor read ReadDiacriticColor write WriteDiacriticColor; property DisableCharacterSpaceGrid read ReadDisableCharacterSpaceGrid write WriteDisableCharacterSpaceGrid; property DoubleStrikeThrough read ReadDoubleStrikeThrough write WriteDoubleStrikeThrough; property Duplicate read ReadDuplicate; property Emboss read ReadEmboss write WriteEmboss; property EmphasisMark read ReadEmphasisMark write WriteEmphasisMark; property Engrave read ReadEngrave write WriteEngrave; property Fill read ReadFill; property Glow read ReadGlow; property Hidden read ReadHidden write WriteHidden; property Italic read ReadItalic write WriteItalic; property ItalicBi read ReadItalicBi write WriteItalicBi; property Kerning read ReadKerning write WriteKerning; property Ligatures read ReadLigatures write WriteLigatures; property Line read ReadLine write WriteLine; property Name read ReadName write WriteName; property NameAscii read ReadNameAscii write WriteNameAscii; property NameBi read ReadNameBi write WriteNameBi; property NameFarEast read ReadNameFarEast write WriteNameFarEast; property NameOther read ReadNameOther write WriteNameOther; property NumberForm read ReadNumberForm write WriteNumberForm; property NumberSpacing read ReadNumberSpacing write WriteNumberSpacing; property Outline read ReadOutline write WriteOutline; property Position read ReadPosition write WritePosition; property Reflection read ReadReflection; property Scaling read ReadScaling write WriteScaling; property Shading read ReadShading; property Shadow read ReadShadow write WriteShadow; property Size read ReadSize write WriteSize; property SizeBi read ReadSizeBi write WriteSizeBi; property SmallCaps read ReadSmallCaps write WriteSmallCaps; property Spacing read ReadSpacing write WriteSpacing; property StrikeThrough read ReadStrikeThrough write WriteStrikeThrough; property StylisticSet read ReadStylisticSet write WriteStylisticSet; property Subscript read ReadSubscript write WriteSubscript; property Superscript read ReadSuperscript write WriteSuperscript; property TextColor read ReadTextColor; property TextShadow read ReadTextShadow; property ThreeD read ReadThreeD; property Underline read ReadUnderline write WriteUnderline; property UnderlineColor read ReadUnderlineColor write WriteUnderlineColor; Function WriteUnderlineColor(value);virtual; Function ReadUnderlineColor();virtual; Function WriteUnderline(value);virtual; Function ReadUnderline();virtual; Function ReadThreeD();virtual; Function ReadTextShadow();virtual; Function ReadTextColor();virtual; Function WriteSuperscript(value);virtual; Function ReadSuperscript();virtual; Function WriteSubscript(value);virtual; Function ReadSubscript();virtual; Function WriteStylisticSet(value);virtual; Function ReadStylisticSet();virtual; Function WriteStrikeThrough(value);virtual; Function ReadStrikeThrough();virtual; Function WriteSpacing(value);virtual; Function ReadSpacing();virtual; Function WriteSmallCaps(value);virtual; Function ReadSmallCaps();virtual; Function WriteSizeBi(value);virtual; Function ReadSizeBi();virtual; Function WriteSize(value);virtual; Function ReadSize();virtual; Function WriteShadow(value);virtual; Function ReadShadow();virtual; Function ReadShading();virtual; Function WriteScaling(value);virtual; Function ReadScaling();virtual; Function ReadReflection();virtual; Function WritePosition(value);virtual; Function ReadPosition();virtual; Function WriteOutline(value);virtual; Function ReadOutline();virtual; Function WriteNumberSpacing(value);virtual; Function ReadNumberSpacing();virtual; Function WriteNumberForm(value);virtual; Function ReadNumberForm();virtual; Function WriteNameOther(value);virtual; Function ReadNameOther();virtual; Function WriteNameFarEast(value);virtual; Function ReadNameFarEast();virtual; Function WriteNameBi(value);virtual; Function ReadNameBi();virtual; Function WriteNameAscii(value);virtual; Function ReadNameAscii();virtual; Function WriteName(value);virtual; Function ReadName();virtual; Function WriteLine(value);virtual; Function ReadLine();virtual; Function WriteLigatures(value);virtual; Function ReadLigatures();virtual; Function WriteKerning(value);virtual; Function ReadKerning();virtual; Function WriteItalicBi(value);virtual; Function ReadItalicBi();virtual; Function WriteItalic(value);virtual; Function ReadItalic();virtual; Function WriteHidden(value);virtual; Function ReadHidden();virtual; Function ReadGlow();virtual; Function ReadFill();virtual; Function WriteEngrave(value);virtual; Function ReadEngrave();virtual; Function WriteEmphasisMark(value);virtual; Function ReadEmphasisMark();virtual; Function WriteEmboss(value);virtual; Function ReadEmboss();virtual; Function ReadDuplicate();virtual; Function WriteDoubleStrikeThrough(value);virtual; Function ReadDoubleStrikeThrough();virtual; Function WriteDisableCharacterSpaceGrid(value);virtual; Function ReadDisableCharacterSpaceGrid();virtual; Function WriteDiacriticColor(value);virtual; Function ReadDiacriticColor();virtual; Function WriteContextualAlternates(value);virtual; Function ReadContextualAlternates();virtual; Function WriteColorIndexBi(value);virtual; Function ReadColorIndexBi();virtual; Function WriteColorIndex(value);virtual; Function ReadColorIndex();virtual; Function WriteColor(value);virtual; Function ReadColor();virtual; Function ReadBorders();virtual; Function WriteBoldBi(value);virtual; Function ReadBoldBi();virtual; Function WriteBold(value);virtual; Function ReadBold();virtual; Function WriteAllCaps(value);virtual; Function ReadAllCaps();virtual; End; // ============== 实现 ================= // Function TSDocxFont.Init(pr); Begin pr_ := pr; color_index_ := TSWdColorIndex(); color_ := TSWdColor(); End; Function TSDocxFont.Apply();virtual; Begin pr_.Update("first"); End; Function TSDocxFont.ReWrite(pr);virtual; Begin self.Reset(); rpr := pr.Root().FirstChildElement("w:rPr"); if not ifObj(rpr) then return; marshal := rPr.Marshal()[0]; node := class(TSXml).GetNode(pr_.Root(), "w:rPr", "first"); class(TSXml).UpdateNode(node, marshal["attributes"], marshal["children"]); End; // Methods Function TSDocxFont.Reset();virtual; Begin pr_.Delete(); End; // Properties Function TSDocxFont.WriteAllCaps(value);virtual; Begin pr_.Caps := value = TSDocxEnumerations.wdToggle() ? _Not(self.Caps) : value; End; Function TSDocxFont.ReadAllCaps();virtual; Begin return pr_.Value("Caps"); End; Function TSDocxFont.WriteBold(value);virtual; Begin pr_.Bold := value = TSDocxEnumerations.wdToggle() ? _Not(self.Bold) : value; End; Function TSDocxFont.ReadBold();virtual; Begin return pr_.Value("Bold"); End; Function TSDocxFont.WriteBoldBi(value);virtual; Begin pr_.BCs := value = TSDocxEnumerations.wdToggle() ? _Not(self.BoldBi) : value; End; Function TSDocxFont.ReadBoldBi();virtual; Begin return pr_.Value("bCs"); End; Function TSDocxFont.WriteColor(value);virtual; Begin val := color_index_[value]; if ifnil(val) then val := color_[value]; pr_.Color := val; End; Function TSDocxFont.ReadColor();virtual; Begin v := pr_.Value("Color"); value := color_index_[v]; return ifnil(value) ? color_[v] : value; End; Function TSDocxFont.WriteColorIndex(value);virtual; Begin val := color_index_[value]; pr_.Color := val; End; Function TSDocxFont.ReadColorIndex();virtual; Begin return color_index_[pr_.Value("Color")]; End; Function TSDocxFont.WriteColorIndexBi(value);virtual; Begin self.ColorIndex := value; End; Function TSDocxFont.ReadColorIndexBi();virtual; Begin return self.ColorIndex; End; Function TSDocxFont.WriteContextualAlternates(value);virtual; Begin pr_.ContextualAlternates := value; End; Function TSDocxFont.ReadContextualAlternates();virtual; Begin return pr_.Value("ContextualAlternates"); End; Function TSDocxFont.WriteDisableCharacterSpaceGrid(value);virtual; Begin pr_.SnapToGrid := value ? false : true; End; Function TSDocxFont.ReadDisableCharacterSpaceGrid();virtual; Begin return pr_.Value("SnapToGrid") ? false : true; End; Function TSDocxFont.WriteDoubleStrikeThrough(value);virtual; Begin pr_.dStrike := value; End; Function TSDocxFont.ReadDoubleStrikeThrough();virtual; Begin return pr_.Value("dStrike"); End; Function TSDocxFont.ReadDuplicate();virtual; Begin pr := pr_; return pr; End; Function TSDocxFont.WriteEmboss(value);override; Begin pr_.Emboss := value; End; Function TSDocxFont.ReadEmboss();override; Begin return pr_.Value("Emboss"); End; Function TSDocxFont.WriteEmphasisMark(value);virtual; Begin case value of TSDocxEnumerations.wdEmphasisMarkNone: pr_.Em := "none"; TSDocxEnumerations.wdEmphasisMarkOverComma: pr_.Em := "comma"; TSDocxEnumerations.wdEmphasisMarkOverSolidCircle: pr_.Em := "dot"; TSDocxEnumerations.wdEmphasisMarkOverWhiteCircle: pr_.Em := "circle"; TSDocxEnumerations.wdEmphasisMarkUnderSolidCircle: pr_.Em := "underDot"; end; End; Function TSDocxFont.ReadEmphasisMark();virtual; Begin case pr_.Value("Em") of "none", nil: return TSDocxEnumerations.wdEmphasisMarkNone; "comma": return TSDocxEnumerations.wdEmphasisMarkOverComma; "dot": return TSDocxEnumerations.wdEmphasisMarkOverSolidCircle; "circle": return TSDocxEnumerations.wdEmphasisMarkOverWhiteCircle; "underDot": return TSDocxEnumerations.wdEmphasisMarkUnderSolidCircle; end; End; Function TSDocxFont.WriteEngrave(value);virtual; Begin pr_.ImPrint := value; End; Function TSDocxFont.ReadEngrave();virtual; Begin return pr_.Value("ImPrint"); End; Function TSDocxFont.WriteHidden(value);virtual; Begin pr_.Vanish := value; End; Function TSDocxFont.ReadHidden();virtual; Begin return pr_.Value("Vanish"); End; Function TSDocxFont.WriteItalic(value);virtual; Begin pr_.Italic := value; End; Function TSDocxFont.ReadItalic();virtual; Begin return pr_.Value("Italic"); End; Function TSDocxFont.WriteItalicBi(value);virtual; Begin pr_.ICs := value; End; Function TSDocxFont.ReadItalicBi();virtual; Begin return pr_.Value("ICs"); End; Function TSDocxFont.WriteKerning(value);virtual; Begin pr_.Kern := value * 2; End; Function TSDocxFont.ReadKerning();virtual; Begin return pr_.Value("Kern") / 2; End; Function TSDocxFont.WriteLigatures(value);virtual; Begin case value of TSDocxEnumerations.wdLigaturesAll(): pr_.Ligatures := "all"; TSDocxEnumerations.wdLigaturesContextual(): pr_.Ligatures := "contextual"; TSDocxEnumerations.wdLigaturesContextualDiscretional(): pr_.Ligatures := "contextualDiscretional"; TSDocxEnumerations.wdLigaturesContextualHistorical(): pr_.Ligatures := "contextualHistorical"; TSDocxEnumerations.wdLigaturesContextualHistoricalDiscretional(): pr_.Ligatures := "contextualHistoricalDiscretional"; TSDocxEnumerations.wdLigaturesDiscretional(): pr_.Ligatures := "discretional"; TSDocxEnumerations.wdLigaturesHistorical(): pr_.Ligatures := "historical"; TSDocxEnumerations.wdLigaturesHistoricalDiscretional(): pr_.Ligatures := "historicalDiscretional"; TSDocxEnumerations.wdLigaturesNone(): pr_.Ligatures := "none"; TSDocxEnumerations.wdLigaturesStandard(): pr_.Ligatures := "standard"; TSDocxEnumerations.wdLigaturesStandardContextual(): pr_.Ligatures := "standardContextual"; TSDocxEnumerations.wdLigaturesStandardContextualDiscretional(): pr_.Ligatures := "standardContextualDiscretional"; TSDocxEnumerations.wdLigaturesStandardContextualHistorical(): pr_.Ligatures := "standardContextualHistorical"; TSDocxEnumerations.wdLigaturesStandardDiscretional(): pr_.Ligatures := "standardDiscretional"; TSDocxEnumerations.wdLigaturesStandardHistorical(): pr_.Ligatures := "standardHistorical"; TSDocxEnumerations.wdLigaturesStandardHistoricalDiscretional(): pr_.Ligatures := "standardHistoricalDiscretional"; end; End; Function TSDocxFont.ReadLigatures();virtual; Begin case pr_.Value("Ligatures") of "all": return TSDocxEnumerations.wdLigaturesAll(); "contextual": return TSDocxEnumerations.wdLigaturesContextual(); "contextualDiscretional": return TSDocxEnumerations.wdLigaturesContextualDiscretional(); "contextualHistorical": return TSDocxEnumerations.wdLigaturesContextualHistorical(); "contextualHistoricalDiscretional": return TSDocxEnumerations.wdLigaturesContextualHistoricalDiscretional(); "discretional": return TSDocxEnumerations.wdLigaturesDiscretional(); "historical": return TSDocxEnumerations.wdLigaturesHistorical(); "historicalDiscretional": return TSDocxEnumerations.wdLigaturesHistoricalDiscretional(); "none", nil: return TSDocxEnumerations.wdLigaturesNone(); "standard": return TSDocxEnumerations.wdLigaturesStandard(); "standardContextual": return TSDocxEnumerations.wdLigaturesStandardContextual(); "standardContextualDiscretional": return TSDocxEnumerations.wdLigaturesStandardContextualDiscretional(); "standardContextualHistorical": return TSDocxEnumerations.wdLigaturesStandardContextualHistorical(); "standardDiscretional": return TSDocxEnumerations.wdLigaturesStandardDiscretional(); "standardHistorical": return TSDocxEnumerations.wdLigaturesStandardHistorical(); "standardHistoricalDiscretional": return TSDocxEnumerations.wdLigaturesStandardHistoricalDiscretional(); end; End; Function TSDocxFont.WriteName(value);virtual; Begin pr_.rFont.EastAsia := value; pr_.rFont.Ascii := value; End; Function TSDocxFont.ReadName();virtual; Begin return pr_.rFont.Value("EastAsia"); End; Function TSDocxFont.WriteNameAscii(value);virtual; Begin pr_.rFont.Ascii := value; End; Function TSDocxFont.ReadNameAscii();virtual; Begin return pr_.rFont.Value("Ascii"); End; Function TSDocxFont.WriteNameBi(value);virtual; Begin pr_.rFont.Cs := value; End; Function TSDocxFont.ReadNameBi();virtual; Begin return pr_.rFont.Value("Cs"); End; Function TSDocxFont.WriteNameFarEast(value);virtual; Begin pr_.rFont.EastAsia := value; End; Function TSDocxFont.ReadNameFarEast();virtual; Begin ret := pr_.rFont.Value("EastAsia"); return ret ? ret : "宋体"; End; Function TSDocxFont.WriteNameOther(value);virtual; Begin pr_.rFont.HAnsi := value; End; Function TSDocxFont.ReadNameOther();virtual; Begin return pr_.rFont.Value("HAnsi"); End; Function TSDocxFont.WriteNumberForm(value);virtual; Begin case value of TSDocxEnumerations.wdNumberFormDefault(): pr_.NumForm := "default"; TSDocxEnumerations.wdNumberFormLining(): pr_.NumForm := "lining"; TSDocxEnumerations.wdNumberFormOldstyle(): pr_.NumForm := "oldStyle"; end; End; Function TSDocxFont.ReadNumberForm();virtual; Begin case pr_.Value("NumForm") of "default", nil: return TSDocxEnumerations.wdNumberFormDefault(); "lining": return TSDocxEnumerations.wdNumberFormLining(); "oldStyle": return TSDocxEnumerations.wdNumberFormOldstyle(); end; End; Function TSDocxFont.WriteNumberSpacing(value);virtual; Begin case value of TSDocxEnumerations.wdNumberSpacingDefault(): pr_.NumSpacing := "default"; TSDocxEnumerations.wdNumberSpacingProportional(): pr_.NumSpacing := "proportional"; TSDocxEnumerations.wdNumberSpacingTabular(): pr_.NumSpacing := "tabular"; end; End; Function TSDocxFont.ReadNumberSpacing();virtual; Begin case pr_.Value("NumSpacing") of "default", nil: return TSDocxEnumerations.wdNumberSpacingDefault(); "proportional": return TSDocxEnumerations.wdNumberSpacingProportional(); "tabular": return TSDocxEnumerations.wdNumberSpacingTabular(); end; End; Function TSDocxFont.WriteOutline(value);virtual; Begin pr_.Outline := value = TSDocxEnumerations.wdToggle() ? _Not(self.Outline) : value; End; Function TSDocxFont.ReadOutline();virtual; Begin return pr_.Value("Outline"); End; Function TSDocxFont.WritePosition(value);virtual; Begin pr_.Position := value * 2; End; Function TSDocxFont.ReadPosition();virtual; Begin return pr_.Value("Position") / 2; End; Function TSDocxFont.WriteScaling(value);virtual; Begin pr_.W := value; End; Function TSDocxFont.ReadScaling();virtual; Begin return pr_.Value("W"); End; Function TSDocxFont.WriteShadow(value);virtual; Begin pr_.Shadow := value; End; Function TSDocxFont.ReadShadow();virtual; Begin return pr_.Value("Shadow"); End; Function TSDocxFont.WriteSize(value);virtual; Begin pr_.Sz := value * 2; End; Function TSDocxFont.ReadSize();virtual; Begin return pr_.Value("Sz") / 2; End; Function TSDocxFont.WriteSizeBi(value);virtual; Begin pr_.SzCs := value * 2; End; Function TSDocxFont.ReadSizeBi();virtual; Begin return pr_.Value("SzCs") / 2; End; Function TSDocxFont.WriteSmallCaps(value);virtual; Begin pr_.SmallCaps := value = TSDocxEnumerations.wdToggle() ? _Not(self.SmallCaps) : value; End; Function TSDocxFont.ReadSmallCaps();virtual; Begin return pr_.Value("SmallCaps"); End; Function TSDocxFont.WriteSpacing(value);virtual; Begin pr_.Spacing := value * 20; End; Function TSDocxFont.ReadSpacing();virtual; Begin return pr_.Value("Spacing") / 20; End; Function TSDocxFont.WriteStrikeThrough(value);virtual; Begin pr_.Strike := value; End; Function TSDocxFont.ReadStrikeThrough();virtual; Begin return pr_.Value("Strike"); End; Function TSDocxFont.WriteSubscript(value);virtual; Begin if value then pr_.VertAlign := "subscript"; else if self.Subscript then pr_.VertAlign := "none"; End; Function TSDocxFont.ReadSubscript();virtual; Begin val := pr_.Value("VertAlign"); return val = "subscript"; End; Function TSDocxFont.WriteSuperscript(value);virtual; Begin if value then pr_.VertAlign := "supercript"; else if self.Superscript then pr_.VertAlign := "none"; End; Function TSDocxFont.ReadSuperscript();virtual; Begin val := pr_.Value("VertAlign"); return val = "supercript"; End; Function TSDocxFont.WriteUnderline(value);virtual; Begin case value of TSDocxEnumerations.wdUnderlineDash(): pr_.U := "dash"; TSDocxEnumerations.wdUnderlineDashHeavy(): pr_.U := "dashedHeavy"; TSDocxEnumerations.wdUnderlineDashLong(): pr_.U := "dashLong"; TSDocxEnumerations.wdUnderlineDashLongHeavy(): pr_.U := "dashLongHeavy"; TSDocxEnumerations.wdUnderlineDotDash(): pr_.U := "dotDash"; TSDocxEnumerations.wdUnderlineDotDashHeavy(): pr_.U := "dashDotHeavy"; TSDocxEnumerations.wdUnderlineDotDotDash(): pr_.U := "dotDotDash"; TSDocxEnumerations.wdUnderlineDotDotDashHeavy(): pr_.U := "dashDotDotHeavy"; TSDocxEnumerations.wdUnderlineDotted(): pr_.U := "dotted"; TSDocxEnumerations.wdUnderlineDottedHeavy(): pr_.U := "dottedHeavy"; TSDocxEnumerations.wdUnderlineDouble(): pr_.U := "double"; TSDocxEnumerations.wdUnderlineNone(): pr_.U := "none"; TSDocxEnumerations.wdUnderlineSingle(): pr_.U := "single"; TSDocxEnumerations.wdUnderlineThick(): pr_.U := "thick"; TSDocxEnumerations.wdUnderlineWavy(): pr_.U := "wave"; TSDocxEnumerations.wdUnderlineWavyDouble(): pr_.U := "wavyDoule"; TSDocxEnumerations.wdUnderlineWavyHeavy(): pr_.U := "wavyHeavy"; TSDocxEnumerations.wdUnderlineWords(): pr_.U := "words"; end; End; Function TSDocxFont.ReadUnderline();virtual; Begin case pr_.Value("U") of "dash": return TSDocxEnumerations.wdUnderlineDash(); "dashedHeavy": return TSDocxEnumerations.wdUnderlineDashHeavy(); "dashLong": return TSDocxEnumerations.wdUnderlineDashLong(); "dashLongHeavy": return TSDocxEnumerations.wdUnderlineDashLongHeavy(); "dotDash": return TSDocxEnumerations.wdUnderlineDotDash(); "dashDotHeavy": return TSDocxEnumerations.wdUnderlineDotDashHeavy(); "dotDotDash": return TSDocxEnumerations.wdUnderlineDotDotDash(); "dashDotDotHeavy": return TSDocxEnumerations.wdUnderlineDotDotDashHeavy(); "dotted": return TSDocxEnumerations.wdUnderlineDotted(); "dottedHeavy": return TSDocxEnumerations.wdUnderlineDottedHeavy(); "double": return TSDocxEnumerations.wdUnderlineDouble(); "none", nil: return TSDocxEnumerations.wdUnderlineNone(); "single": return TSDocxEnumerations.wdUnderlineSingle(); "thick": return TSDocxEnumerations.wdUnderlineThick(); "wave": return TSDocxEnumerations.wdUnderlineWavy(); "wavyDoule": return TSDocxEnumerations.wdUnderlineWavyDouble(); "wavyHeavy": return TSDocxEnumerations.wdUnderlineWavyHeavy(); "words": return TSDocxEnumerations.wdUnderlineWords(); end; End; Function TSDocxFont.WriteUnderlineColor(value);virtual; Begin pr_.UColor := color_[value]; End; Function TSDocxFont.ReadUnderlineColor();virtual; Begin return color_[pr_.Value("UColor", true)]; End;