Использование Microsoft ScriptControl

FOwner TWinControl TWinControl(FOwner) (FEnumPosition < ControlCount) (I < celt) TVariantList(rgvar)[I] := FScriptControl.GetProxy(Controls[FEnumPosition]); Inc(I); Inc(FEnumPosition); ; ; Для TCollection организуется перебор элементов коллекции. FOwner TCollection TCollection(FOwner) (FEnumPosition < Count) (I < celt) TVariantList(rgvar)[I] := FScriptControl.GetProxy(Items[FEnumPosition]); Inc(I); Inc(FEnumPosition); ; ; Для TStrings перебираются строки и возвращаются их значения. FOwner TStrings TStrings(FOwner) (FEnumPosition < Count) (I < celt) TVariantList(rgvar)[I] := TStrings(FOwner)[FEnumPosition]; Inc(I); Inc(FEnumPosition); ; ; Result := S_FALSE; I <> celt Result := S_FALSE; Assigned(pceltFetched) pceltFetched^ := I; ; Метод Skip пропускает запрошенное количество элементов и возвращает S_OK, если еще остались элементы для перебора. TVCLEnumerator.Skip(celt: LongWord): HResult; Total: Integer; Result := S_FALSE; FOwner TWinControl Total := TWinControl(FOwner).ControlCount FOwner TCollection Total := TCollection(FOwner).Count FOwner TStrings Total := TStrings(FOwner).Count Exit; FEnumPosition + celt <= Total Result := S_OK; Inc(FEnumPosition, celt) ; ; Метод Clone клонирует объект, возвращая интерфейс его копии. TVCLEnumerator.Clone( Enum: IEnumVariant): HResult; NewEnum: TVCLEnumerator; NewEnum := TVCLEnumerator.Create(FOwner, FScriptControl); NewEnum.FEnumPosition := FEnumPosition; Enum := NewEnum IEnumVariant; Result := S_OK; ; Для того чтобы класс TVCLProxy мог вернуть интерфейс IEnumVariant, требуется дополнить метод Invoke следующим кодом: DispId DISPID_NEWENUM: // У объекта запрашивают интерфейс IEnumVariant для ForEach // создаем класс, реализующий этот интерфейс OleVariant(VarResult^) := TVCLEnumerator.Create(FOwner, FScriptControl) IEnumVariant; ; Компонент TVCLScriptControl Текст этого компонента приведен на CD-ROM. Данный компонент является наследником TScriptControl и реализует функциональность по работе с TVCLProxy. Заключение Microsoft ScriptControl – качественное решение для задач, требующих включения в программу интерпретирующего ядра. Интегрировав его с VCL, мы получаем мощный и гибкий инструмент, позволяющий наращивать возможности в любом направлении. Приведенной в данной статье информации вполне достаточно, чтобы на основе помещенного на компакт-диске компонента TVCLScriptControl создать решение, удовлетворяющее любой конкретной задаче.

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...