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

 

Установка свойств

Для установки свойств классов 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;

 

 

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

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

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

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


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