Установка свойств
Для установки свойств классов VCL служит метод SetVCLProperty. В нем осуществляется обратная трансляция типов данных OLE в типы данных Object Pascal.
Code: |
function TVCLProxy.SetVCLProperty(PropInfo: PPropInfo; Argument: TVariantArg): HResult; var I, J, K, CommaPos: Integer; GoodToken: Boolean; S, S1: String; DT: TDateTime; ST: TSystemTime; IP: IQueryPersistent; Data, TypeData: PTypeData; TypeInfo: PTypeInfo; begin Result := S_OK; case PropInfo^.PropType^.Kind of |
Главным отличием этого метода от SetVCLProperty является необходимость проверки типа данных передаваемого параметра
Code: |
tkChar, tkString, tkLString, tkWChar, tkWString: begin // Проверяем тип параметра ValidType(Argument, VT_BSTR, TRUE); // И устанавливаем свойство SetStrProp(FOwner, PropInfo, Argument.bstrVal); end; |
Для целочисленных свойств добавим еще один сервис – если свойство имеет тип TCursor или TColor – обеспечим трансляцию символьной строки с соответствующим названием константы в целочисленный идентификатор.
Code: |
tkInteger: begin // Проверяем тип свойства на TCursor, TColor // если он совпадает и передано символьное значение // пытаемся получить его идентификатор if (CompareText(PropInfo^.PropType^.Name, 'TCURSOR') = 0) and (Argument.vt = VT_BSTR) then begin if not IdentToCursor(Argument.bstrVal, I) then begin Result := DISP_E_BADVARTYPE; Exit; end; end else if (CompareText(PropInfo^.PropType^.Name, 'TCOLOR') = 0) and (Argument.vt = VT_BSTR) then begin if not IdentToColor(Argument.bstrVal, I) then begin Result := DISP_E_BADVARTYPE; Exit; end; end else // Просто цифра I := IntValue(Argument); // Устанавливаем свойство SetOrdProp(FOwner, PropInfo, I); end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!