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

 

И, наконец, функция HasProperty проверяет наличие у объекта VCL опубликованного свойства с заданным именем

 

Code:

  DISPID_HASPROPERTY:

    begin // Вызвана функция HasProperty

       // Проверяем наличие аргумента

       CheckArgCount(dps.cArgs, [1], TRUE);

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

       _ValidType(0, VT_BSTR, TRUE);

       S := dps.rgvarg^[pDispIds^[0]].bstrVal;

       // Возвращаем True, если свойство есть

       OleVariant(varResult^) :=

         Assigned(GetPropInfo(FOwner.ClassInfo, S));

     end;

 

 

 

Если ни один из DispID не обработан значит DispID содержит адрес структуры TPropInfo свойства VCL

 

Code:

else

   // Это не наша функция, значит это свойство

   // Проверяем Flags, чтобы узнать устанавливается значение

   // или получается

   Put := (Flags and DISPATCH_PROPERTYPUT) <> 0;

   if Put then begin

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

     // Проверяем наличие аргумента

     CheckArgCount(dps.cArgs, [1], TRUE);

     // И устанавливаем свойство

     Result := SetVCLProperty(PPropInfo(DispId),

       dps.rgvarg^[pDispIds^[0]])

   end

   else

   begin

     // Получаем значение

     if DispId = 0 then begin

       // DispId = 0 - требуется свойство по умолчанию

       // Возвращаем свой IDispatch

       OleVariant(VarResult^) := Self as IDispatch;

       Exit;

     end;

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

     Result := GetVCLProperty(PPropInfo(DispId),

       dps, pDispIds, OutValue);

     if Result = S_OK then

       // Получили успешно - сохраняем результат

       OleVariant(VarResult^) := OutValue;

   end;

end;

end;

 

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

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

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

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


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