<< Click to Display Table of Contents >> Navigation: Using Delphi classes and functions > Registering for-in enumerators |
To use an object of some class in for-in statement it is necessary to register a class enumerator.
Class enumerator is a descendant of abstract THtScriptEnumerator class:
THtScriptEnumerator = class
public
///<summary> Create enumerator for Instance object</summary>
constructor Create(const Instance: TObject); virtual; abstract;
///<summary> Move to next item. Return false if end of list is reached </summary>
function Next: boolean; virtual; abstract;
///<summary> Get current item </summary>
procedure GetCurrent(var Value: variant); virtual; abstract;
end;
constructor TStringListEnumerator.Create(const Instance: TObject);
begin
fIndex := -1;
fList := Instance as TStringList;
end;
procedure TStringListEnumerator.GetCurrent(var Value: variant);
begin
Value := fList[fIndex]
end;
function TStringListEnumerator.Next: boolean;
begin
inc(fIndex);
Result := fIndex < fList.Count;
end;
with HtScriptGlobal.RegisterClass('Create()', @TList.Create, TList) do
begin
EnumeratorClass := TListEnumerator;
end;