Содержание материала

 

Для TStrings перебираются строки и возвращаются их значения.

 

Code:

else

if FOwner is TStrings then begin

   with TStrings(FOwner) do begin

     while (FEnumPosition < Count) and (I < celt) do begin

       TVariantList(rgvar)[I] := TStrings(FOwner)[FEnumPosition];

       Inc(I);

       Inc(FEnumPosition);

     end;

   end;

end else

   Result := S_FALSE;

if I <> celt then

   Result := S_FALSE;

if Assigned(pceltFetched) then

   pceltFetched^ := I;

end;

 

Метод Skip пропускает запрошенное количество элементов и возвращает S_OK, если еще остались элементы для перебора

 

Code:

function TVCLEnumerator.Skip(celt: LongWord): HResult;

var

Total: Integer;

begin

Result := S_FALSE;

if FOwner is TWinControl then

   Total := TWinControl(FOwner).ControlCount

else

if FOwner is TCollection then

   Total := TCollection(FOwner).Count

else

if FOwner is TStrings then

   Total := TStrings(FOwner).Count

else

   Exit;

if FEnumPosition + celt <= Total then begin

   Result := S_OK;

   Inc(FEnumPosition, celt)

end;

end;

 

Метод Clone клонирует объект, возвращая интерфейс его копии

 

Code:

function TVCLEnumerator.Clone(out Enum: IEnumVariant): HResult;

var

NewEnum: TVCLEnumerator;

begin

NewEnum := TVCLEnumerator.Create(FOwner, FScriptControl);

NewEnum.FEnumPosition := FEnumPosition;

Enum := NewEnum as IEnumVariant;

Result := S_OK;

end;

 

Для того чтобы класс TVCLProxy мог вернуть интерфейс IEnumVariant надо дополнить метод Invoke следующим кодом:

 

Code:

case DispId of

  DISPID_NEWENUM: begin

       // У объекта запрашивают интерфейс IEnumVariant для ForEach

       // создаем класс, реализующий этот интерфейс

       OleVariant(VarResult^) := TVCLEnumerator.Create(FOwner,

         FScriptControl) as IEnumVariant;

     end;

 

Компонент TVCLScriptControl

Текст этого компонента приведен на CD-ROM. Он является наследником TScriptControl и реализует функциональность по работе с TVCLProxy.

 

Заключение

Microsoft ScriptControl качественное решение для задач, требующих включения в программу интерпретирующего ядра. Интегрировав его с VCL, мы получаем мощный и гибкий инструмент, позволяющий наращивать возможности в любом направлении. Информация из этой главы вполне достаточна, чтобы на основе приведенного на диске компонента TVCLScriptControl, создать решение, удовлетворяющее любой конкретной задаче.

 

Тенцер А. Л.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить