This topic covers the implementation details of THolidaysDisplay.
Scope: cpHolidaysDisplay.pas; class derived from TBtnEditProperty. Prepared from the curated implementation supplied for this review on 2 October 2026.
This property combines the THolidaysDisplayOptions record with additional per-list members. default_vals=true invokes property-level ResetToDefaults; false reads the record plus the extra members.
The v2 property-level IsDefault and ResetToDefaults methods are included below. They differ from the record methods; keep the two scopes distinct.
Notation and shared helper rules: Reading this reference.
Property-level default profile (v2 source)
ResetToDefaults and IsDefault are now supplied and reproduced in this topic. default_vals=true calls the property-level reset and skips the ordinary per-list reading branch. The reset first calls the record’s ResetToDefaults, then assigns the additional symbol/abbreviation layout settings.
This is not a complete reconstruction of the property constructor. ResetToDefaults does not assign IgnoreHolidaysStartingOn, FontsForBold or FontsForItalics, although IsDefault examines these members (the font checks apply when DisplayHolidayName is true). Their existing values therefore matter. The reset sets HolSetWingdingSeparator to one space; the constructor later sets this property-level separator to an empty string. Do not substitute deletion or default_vals=true for a targeted field edit.
Literal rec_type values emitted within these routines: THolidaysDisplayOptions. Nested values may belong to child wrappers rather than this owner itself; the attribute entries below give their exact locations.
Inherited implementation: TBtnEditProperty. Follow it when the ordered behavior invokes inherited methods; inherited fields are not repeated as locally owned fields.
Structures used directly by this XML implementation:
Exact XML fields and attributes
The paths below start at this record or property node. A slash identifies a child element; @ identifies an attribute. Curly braces mark a variable index or expression, not literal XML text. Initial values describe initialization; they do not establish what an omitted individual element does. The Implementation toggle below contains the supplied routines for exact branch order and conversions.
{s + '-holidays'}/default_vals
XML representation: The text of the default_vals element.
Reading: Reads the element into UseDefaultVals when for each iqhl from qhlA through qhlU; the record node exists. Before this read, UseDefaultVals is set to false.
Writing: Stores the literal text “true” when for each iqhl from qhlA through qhlU; IsDefault (iqhl, hdOptions[iqhl]).
Writing: Stores the literal text “false” when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]).
{s + '-holidays'}/IgnoreHolidaysStartingOn
XML representation: The text of the IgnoreHolidaysStartingOn element.
Reading: Reads the element into IgnoreHolidaysStartingOn[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores the numeric value of IgnoreHolidaysStartingOn[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); IgnoreHolidaysStartingOn[iqhl] is not 999999.
{s + '-holidays'}/HolSetWingdingContentType
XML representation: The text of the HolSetWingdingContentType element.
Reading: Reads the element into buffInt when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false. The subsequent conversion is shown in Implementation.
Writing: Stores the numeric value of HolSetWingdingContentType[iqhl] (see the value table below) when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); HolSetWingdingContentType[iqhl] is not hwtSymbols (0).
{s + '-holidays'}/SymbolLayoutOption
XML representation: The text of the SymbolLayoutOption element.
Reading: Reads the element into buffInt when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false. The subsequent conversion is shown in Implementation.
Writing: Stores the numeric value of SymbolLayoutOption[iqhl] (see the value table below) when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); SymbolLayoutOption[iqhl] is not hsaNone (0).
{s + '-holidays'}/SymbolLayoutTopHeavy
XML representation: The text of the SymbolLayoutTopHeavy element.
Reading: Reads the element into SymbolLayoutTopHeavy[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores true or false according to SymbolLayoutTopHeavy[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); SymbolLayoutTopHeavy[iqhl] is not true.
{s + '-holidays'}/BreakSymbolsString
XML representation: The text of the BreakSymbolsString element.
Reading: Reads the element into BreakSymbolsString[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores true or false according to BreakSymbolsString[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); BreakSymbolsString[iqhl] is not false.
{s + '-holidays'}/SymbolBreakOffset
XML representation: The text of the SymbolBreakOffset element.
Reading: Reads the element into SymbolBreakOffset[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores the numeric value of SymbolBreakOffset[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); SymbolBreakOffset[iqhl] is not 0.
{s + '-holidays'}/SymbolMaxWidth
XML representation: The text of the SymbolMaxWidth element.
Reading: Reads the element into SymbolMaxWidth[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores the numeric value of SymbolMaxWidth[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); SymbolMaxWidth[iqhl] is not 1.
{s + '-holidays'}/SeparatorUsesSymbolFont
XML representation: The text of the SeparatorUsesSymbolFont element.
Reading: Reads the element into SeparatorUsesSymbolFont[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores true or false according to SeparatorUsesSymbolFont[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); SeparatorUsesSymbolFont[iqhl] is not false.
{s + '-holidays'}/UseQuarkFileFont
XML representation: The text of the UseQuarkFileFont element.
Reading: Reads the element into UseQuarkFileFont[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores true or false according to UseQuarkFileFont[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); UseQuarkFileFont[iqhl] is not false.
{s + '-holidays'}/AbbrevLayoutOption
XML representation: The text of the AbbrevLayoutOption element.
Reading: Reads the element into buffInt when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false. The subsequent conversion is shown in Implementation.
Writing: Stores the numeric value of AbbrevLayoutOption[iqhl] (see the value table below) when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); AbbrevLayoutOption[iqhl] is not hsaNone (0).
{s + '-holidays'}/AbbrevLayoutTopHeavy
XML representation: The text of the AbbrevLayoutTopHeavy element.
Reading: Reads the element into AbbrevLayoutTopHeavy[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores true or false according to AbbrevLayoutTopHeavy[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); AbbrevLayoutTopHeavy[iqhl] is not true.
{s + '-holidays'}/BreakAbbrevsString
XML representation: The text of the BreakAbbrevsString element.
Reading: Reads the element into BreakAbbrevsString[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores true or false according to BreakAbbrevsString[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); BreakAbbrevsString[iqhl] is not false.
{s + '-holidays'}/AbbrevBreakOffset
XML representation: The text of the AbbrevBreakOffset element.
Reading: Reads the element into AbbrevBreakOffset[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores the numeric value of AbbrevBreakOffset[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); AbbrevBreakOffset[iqhl] is not 0.
{s + '-holidays'}/AbbrevMaxWidth
XML representation: The text of the AbbrevMaxWidth element.
Reading: Reads the element into AbbrevMaxWidth[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores the numeric value of AbbrevMaxWidth[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); AbbrevMaxWidth[iqhl] is not 1.
{s + '-holidays'}/NoDupHolNames
XML representation: The text of the NoDupHolNames element.
Reading: Reads the element into NoDupHolNames[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores true or false according to NoDupHolNames[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); hdOptions[iqhl].DisplayHolidayName is true; NoDupHolNames[iqhl] is true.
{s + '-holidays'}/HolSetWingdingSeparator
XML representation: The text of the HolSetWingdingSeparator element.
Reading: Reads the element into HolSetWingdingSeparator[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores HolSetWingdingSeparator[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); hdOptions[iqhl].HolSetWingdingPosition is not hwpDoNotShow (0); HolSetWingdingSeparator[iqhl] is not “ ”.
{s + '-holidays'}/HolSetWingdingLeftWrapper
XML representation: The text of the HolSetWingdingLeftWrapper element.
Reading: Reads the element into HolSetWingdingLeftWrapper[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores HolSetWingdingLeftWrapper[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); hdOptions[iqhl].HolSetWingdingPosition is not hwpDoNotShow (0); HolSetWingdingLeftWrapper[iqhl] is not empty.
{s + '-holidays'}/HolSetWingdingRightWrapper
XML representation: The text of the HolSetWingdingRightWrapper element.
Reading: Reads the element into HolSetWingdingRightWrapper[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores HolSetWingdingRightWrapper[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); hdOptions[iqhl].HolSetWingdingPosition is not hwpDoNotShow (0); HolSetWingdingRightWrapper[iqhl] is not empty.
{s + '-holidays'}/FontForBold
XML representation: The text of the FontForBold element.
Reading: Reads the element into FontsForBold[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores FontsForBold[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); FontsForBold[iqhl] is not empty.
{s + '-holidays'}/FontForItalics
XML representation: The text of the FontForItalics element.
Reading: Reads the element into FontsForItalics[iqhl] when for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false.
Writing: Stores FontsForItalics[iqhl] when for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]); FontsForItalics[iqhl] is not empty.
{s + '-holidays'}/@rec_type
XML representation: The rec_type attribute.
Writing: Stores the literal text “THolidaysDisplayOptions” when for each iqhl from qhlA through qhlU.
Nested records and repeated elements
Operation |
XML location |
When it is processed |
Read aPropValue.hdOptions[iqhl] |
{s + '-holidays'} |
for each iqhl from qhlA through qhlU; the record node exists; UseDefaultVals is false |
Write hdOptions[iqhl] |
{s + '-holidays'} |
for each iqhl from qhlA through qhlU; the following is false: IsDefault (iqhl, hdOptions[iqhl]) |
Initialization and reset values
THolidaysDisplay.Create
Setting or temporary variable |
Initial value |
When it is assigned |
PropName |
“Holidays Display Options” |
Always |
Required |
1 |
Always |
PropValue |
Default (TSL_PropValue) |
Always |
PropValue.hdOptions[qhl].HolSetWingdingPosition |
hwpDoNotShow (0) |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].HolSetWingdingLeftWrapper[qhl] |
an empty string |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].HolSetWingdingRightWrapper[qhl] |
an empty string |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].HolSetWingdingSeparator[qhl] |
“ ” |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].DisplayHolidayName |
True |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].ChangeWingdingSize |
false |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].NewWingdingSize |
80 |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].AbbrevSort |
false |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].AbbrevSep |
an empty string |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].AbbrevSortType |
hstNone (0) |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].AbbrevSortFilter |
an empty string |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].DoNotSplitAbbrevs |
false |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].SymbolsSep |
an empty string |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].SymbolsSortType |
hsstNone (0) |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].SymbolsSortFilter |
an empty string |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl].SymbolFont |
IniSettings.DefaultHolidayFont |
for each qhl from qhlA through qhlU; UseIniSettingsInPropertyConstructor is true |
PropValue.hdOptions[qhl].SymbolFont |
an empty string |
for each qhl from qhlA through qhlU; UseIniSettingsInPropertyConstructor is false |
IgnoreHolidaysStartingOn[qhl] |
999999 |
for each qhl from qhlA through qhlU |
HolSetWingdingContentType[qhl] |
hwtSymbols (0) |
for each qhl from qhlA through qhlU |
SymbolLayoutOption[qhl] |
hsaNone (0) |
for each qhl from qhlA through qhlU |
BreakSymbolsString[qhl] |
false |
for each qhl from qhlA through qhlU |
SymbolLayoutTopHeavy[qhl] |
true |
for each qhl from qhlA through qhlU |
SymbolBreakOffset[qhl] |
0 |
for each qhl from qhlA through qhlU |
SymbolMaxWidth[qhl] |
1 |
for each qhl from qhlA through qhlU |
SeparatorUsesSymbolFont[qhl] |
false |
for each qhl from qhlA through qhlU |
UseQuarkFileFont[qhl] |
false |
for each qhl from qhlA through qhlU |
NoDupHolNames[qhl] |
false |
for each qhl from qhlA through qhlU |
HolSetWingdingSeparator[qhl] |
an empty string |
for each qhl from qhlA through qhlU |
HolSetWingdingLeftWrapper[qhl] |
an empty string |
for each qhl from qhlA through qhlU |
HolSetWingdingRightWrapper[qhl] |
an empty string |
for each qhl from qhlA through qhlU |
FontsForBold[qhl] |
an empty string |
for each qhl from qhlA through qhlU |
FontsForItalics[qhl] |
an empty string |
for each qhl from qhlA through qhlU |
AbbrevLayoutOption[qhl] |
hsaNone (0) |
for each qhl from qhlA through qhlU |
AbbrevLayoutTopHeavy[qhl] |
true |
for each qhl from qhlA through qhlU |
BreakAbbrevsString[qhl] |
false |
for each qhl from qhlA through qhlU |
AbbrevBreakOffset[qhl] |
0 |
for each qhl from qhlA through qhlU |
AbbrevMaxWidth[qhl] |
1 |
for each qhl from qhlA through qhlU |
PropValue.hdOptions[qhl] |
IniSettings.HolidaysDisplay.DataValue.hdOptions[qhl] |
UseIniSettingsInPropertyConstructor is true; self is not IniSettings.HolidaysDisplay; for each qhl from qhlA through qhlU |
DataValue |
PropValue |
Always |
This routine also calls inherited Create; self.FillDisplayValue. See Implementation for their order and any conditional calls.
THolidaysDisplay.ResetToDefaults
Setting or temporary variable |
Initial value |
When it is assigned |
NoDupHolNames[qhl] |
false |
Always |
HolSetWingdingContentType[qhl] |
hwtSymbols (0) |
Always |
HolSetWingdingSeparator[qhl] |
“ ” |
Always |
HolSetWingdingLeftWrapper[qhl] |
an empty string |
Always |
HolSetWingdingRightWrapper[qhl] |
an empty string |
Always |
SymbolLayoutOption[qhl] |
hsaNone (0) |
Always |
BreakSymbolsString[qhl] |
false |
Always |
SymbolLayoutTopHeavy[qhl] |
true |
Always |
SymbolBreakOffset[qhl] |
0 |
Always |
SymbolMaxWidth[qhl] |
1 |
Always |
SeparatorUsesSymbolFont[qhl] |
false |
Always |
UseQuarkFileFont[qhl] |
false |
Always |
NoDupHolNames[qhl] |
false |
Always |
AbbrevLayoutOption[qhl] |
hsaNone (0) |
Always |
AbbrevLayoutTopHeavy[qhl] |
true |
Always |
BreakAbbrevsString[qhl] |
false |
Always |
AbbrevBreakOffset[qhl] |
0 |
Always |
AbbrevMaxWidth[qhl] |
1 |
Always |
This routine also calls hdOptions.ResetToDefaults. See Implementation for their order and any conditional calls.
Value namespaces used by this implementation
These are declared Pascal ordinal values. Use the ordinal only where the field serializer actually writes ord(...), an integer cast or an equivalent value. Set-marker strings and local option lists have their own representation; sentinel members in an enum are not automatically legal XML choices.
THolidaySymbolAbbrevLayoutOption
Ordinal |
Declared member |
0 |
hsaNone |
1 |
hsaBreakEquallyIfTooLong |
2 |
hsaMaxNumPerLine |
THolidaysSetWingdingPosition
Ordinal |
Declared member |
0 |
hwpDoNotShow |
1 |
hwpLeft |
2 |
hwpRight |
TqHolList
Ordinal |
Declared member |
0 |
qhlA |
1 |
qhlE |
2 |
qhlI |
3 |
qhlO |
4 |
qhlU |
5 |
qhlNone |
6 |
qhlInsert |
7 |
qhlXtra |
THolSortType
Ordinal |
Declared member |
0 |
hstNone |
1 |
hstFilter |
2 |
hstAlpha |
3 |
hstNoDupesNoSort |
THolSymbolSortType
Ordinal |
Declared member |
0 |
hsstNone |
1 |
hsstFilter |
2 |
hsstNoDuplicates |
3 |
hsstNoDuplicatesExceptsAsterisks |
THolSetWingdingContentType
Ordinal |
Declared member |
0 |
hwtSymbols |
1 |
hwtAbbrevs |
2 |
hwtSymbolsThenAbbrevs |
3 |
hwtAbbrevsThenSymbols |
Storage declarations relevant to interpretation
These are in-memory member and property types, not a list of mandatory XML children. They retain array bounds, fixed buffers and selector types. The field reference above defines what is actually serialized.
Name |
Declared type / bounds |
Kind |
IgnoreHolidaysStartingOn |
array [qhlA..qhlU] of integer |
member |
HolSetWingdingContentType |
array [qhlA..qhlU] of THolSetWingdingContentType |
member |
SymbolLayoutOption |
array [qhlA..qhlU] of THolidaySymbolAbbrevLayoutOption |
member |
SymbolLayoutTopHeavy |
array [qhlA..qhlU] of Boolean |
member |
BreakSymbolsString |
array [qhlA..qhlU] of Boolean |
member |
SymbolBreakOffset |
array [qhlA..qhlU] of integer |
member |
SymbolMaxWidth |
array [qhlA..qhlU] of integer |
member |
SeparatorUsesSymbolFont |
array [qhlA..qhlU] of Boolean |
member |
UseQuarkFileFont |
array [qhlA..qhlU] of Boolean |
member |
NoDupHolNames |
array [qhlA..qhlU] of Boolean |
member |
HolSetWingdingSeparator |
array [qhlA..qhlU] of string |
member |
HolSetWingdingLeftWrapper |
array [qhlA..qhlU] of string |
member |
HolSetWingdingRightWrapper |
array [qhlA..qhlU] of string |
member |
FontsForBold |
array [qhlA..qhlU] of string |
member |
FontsForItalics |
array [qhlA..qhlU] of string |
member |
AbbrevLayoutOption |
array [qhlA..qhlU] of THolidaySymbolAbbrevLayoutOption |
member |
AbbrevLayoutTopHeavy |
array [qhlA..qhlU] of Boolean |
member |
BreakAbbrevsString |
array [qhlA..qhlU] of Boolean |
member |
AbbrevBreakOffset |
array [qhlA..qhlU] of integer |
member |
AbbrevMaxWidth |
array [qhlA..qhlU] of integer |
member |
The Implementation toggle contains only THolidaysDisplay methods. Initializers and helpers belonging to other types are identified separately below. Shared XML-helper limitations are explained in Reading this reference.