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

Наиболее сложным случаем является установка данных типа «набор» (Set). Необходимо выделить из переданной символьной строки разделенные запятыми элементы, для каждого из них проверить, является ли он допустимым для устанавливаемого свойства, и установить соответствующий бит в числе, которое будет установлено в качестве свойства.

 

Code:

  tkSet:

     begin

       // Проверяем тип данных, должна быть символьная строка

       ValidType(Argument, VT_BSTR, TRUE);

       // Получаем данные

       S := Trim(Argument.bstrVal);

       // Получаем информацию RTTI

       Data := GetTypeData(PropInfo^.PropType^);

       TypeInfo := Data^.CompType^;

       TypeData := GetTypeData(TypeInfo);

       I := 0;

       while Length(S) > 0 do begin

         // Проходим по строке, выбирая разделенные запятыми

         // значения идентификаторов

         CommaPos := Pos(',', S);

         if CommaPos = 0 then

           CommaPos := Length(S) + 1;

         S1 := Trim(System.Copy(S, 1, CommaPos - 1));

         System.Delete(S, 1, CommaPos);

         if Length(S1) > 0 then begin

           // Поверяем, какому из допустимых значений соответствует

           // полученный идентификатор

           K := 1;

           GoodToken := FALSE;

           for J := TypeData^.MinValue to TypeData^.MaxValue do

           begin

             if CompareText(S1, GetEnumName(TypeInfo , J)) = 0 then

             begin

               // Идентификатор найден, добавляем его в маску

               I := I or K;

               GoodToken := TRUE;

             end;

             K := K shl 1;

           end;

           if not GoodToken then begin

             // Идентификатор не найдет

             Result := DISP_E_BADVARTYPE;

             Exit;

           end;

         end;

       end;

       // Устанавливаем значение свойства

       SetOrdProp(FOwner, PropInfo, I);

     end;

 

 

Свойство типа Variant устанавливается несложно:

 

Code:

   tkVariant:

     begin

       // Проверяем тип данных аргумента

       ValidType(Argument, VT_VARIANT, TRUE);

       // Устанавливаем значение

       SetVariantProp(FOwner, PropInfo, Argument.pvarVal^);

     end;

  else

    // Остальные типы данных OLE не поддерживаются

    Result := DISP_E_MEMBERNOTFOUND;

end;

end;

 

 

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

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

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

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


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