anchor.diff:      procedure OnValueListEditorSelectEditor(Sender: TObject; aCol,  aRow: Integer; var Editor: TWinControl);
       procedure OnValueListEditorValidateEntry(sender: TObject; aCol, aRow: Integer; const OldValue: string; var NewValue: String);
       function OnValueListEditorEditValue  (const aCol, aRow : integer; var aNewValue : string): boolean;
  +    function ComposeCaption (const aCaption : string; const aMandatory : boolean): string;
     protected
  -    procedure AddLine (const aName : string; const aCaption : string; const aDefaultValue : string; const aEditorKind : TmEditingFrameEditorKind; const aReadOnly : boolean = false);
  +    procedure AddLine (const aName : string; const aCaption : string; const aDefaultValue : string; const aEditorKind : TmEditingFrameEditorKind; const aReadOnly : boolean = false; const aMandatory: boolean = false);
       procedure AddMemo (const aName : string; const aCaption : string; const aDefaultValue : string; const aMemoHeightPercent : double);
       procedure ExtractFields (aVirtualFields : TmVirtualFieldDefs; aList : TStringList);
       function GetValue(const aName : string) : Variant;
  
positive.code:   FLinesByName.Add(aName, tmp);
    tmp.EditorKind:= aEditorKind;
    tmp.Name := aName;
    tmp.Index:= FValueListEditor.InsertRow(aCaption, aDefaultValue, true);
    tmp.ReadOnly:= aReadOnly;
    FLinesByIndex.Add(tmp.Index + 1, tmp);
    FValueListEditor.ItemProps[tmp.Index].ReadOnly:= tmp.ReadOnly;
    if (not tmp.ReadOnly) and ((aEditorKind = ekDate) or (aEditorKind = ekLookupFloat) or (aEditorKind = ekLookupInteger) or (aEditorKind = ekLookupText)) then
  
negative.code: type
    TEditorLine = class
    public
      Name: String;
      Caption: String;
      EditorKind: TmEditingFrameEditorKind;
      Index: integer;
      ReadOnly: boolean;
      Mandatory: boolean;
    end;
  
  { TmEditingFrame }
  