Property

отредактировано August 2006 Раздел: FastScript
мне нужно описать своиство ImageList.Items[0]


В дельфи все выглядит так:
property Items[Index: Integer]: TImageListItem read GetItem write SetItem;

function GetItem(Index: Integer): TImageListItem;
procedure SetItem(Index: Integer; Value: TImageListItem);

Как мне это здеалть?

P.S. Руководство читал и в хелпе смотрел.....

Комментарии

  • отредактировано 18:32
    Плохо смотрели ;)
        Индексируемые (indexed) свойства и свойства по умолчанию (default) описываются дескриптором метода, обычные свойства описываются дескрипторами свойств Get/Set.
    
    begin 
      ... 
      with fsScript1.AddClass(TStrings, 'TPersistent') do 
      begin 
        { property CommaText: String } 
        AddProperty('CommaText', 'string', GetProp, SetProp); 
        { property Count: Integer readonly, second handler is nil } 
        AddProperty('Count', 'Integer', GetProp, nil); 
        { index property Objects[Index: Integer]: TObject } 
        AddIndexProperty('Objects', 'Integer', 'TObject', CallMethod); 
        { default property Strings[Index: Integer]: String } 
        AddDefaultProperty('Strings', 'Integer', 'string', CallMethod); 
      end; 
      ... 
    end; 
    
    { обработчик }
    function TForm1.CallMethod(Instance: TObject; ClassType: TClass; 
      const MethodName: String; var Params: Variant): Variant; 
    begin 
      Result := 0; 
    
      if MethodName = 'OBJECTS.GET' then 
        Result := Integer(TStrings(Instance).Objects[Params[0]]) 
      else if MethodName = 'OBJECTS.SET' then 
        TStrings(Instance).Objects[Params[0]] := TObject(Integer(Params[1])) 
      else if MethodName = 'STRINGS.GET' then 
        Result := TStrings(Instance).Strings[Params[0]] 
      else if MethodName = 'STRINGS.SET' then 
        TStrings(Instance).Strings[Params[0]] := Params[1] 
    end; 
    
    { обработчик }
    function TForm1.GetProp(Instance: TObject; ClassType: TClass; 
      const PropName: String): Variant; 
    begin 
      Result := 0; 
    
      if PropName = 'COMMATEXT' then 
        Result := TStrings(Instance).CommaText 
      else if PropName = 'COUNT' then 
        Result := TStrings(Instance).Count 
    end; 
    
    { обработчик }
    procedure TForm1.SetProp(Instance: TObject; ClassType: TClass; 
      const PropName: String; Value: Variant); 
    begin 
      if PropName = 'COMMATEXT' then 
        TStrings(Instance).CommaText := Value 
    end; 
    
  • отредактировано 18:32
    Спасибо!

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.