И, наконец, функция 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; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!