На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Не получилось отобразить события в субкомпоненте.
    есть компонент TNavarhDataSet и субкомпонент TRawDataIBDataSet
    ExpandedWrap disabled
        TRawDataIBDataSet = class(TCustomRawData)
        private
      ............
        published
          property Connected;
          property RequestName: String read FRequestName write SetRequestName;
          property OnWorkBegin;
          property OnWorkEnd;
          property OnWork;
          property OnError;
        end;
      ----------------------------------------------  
        
        TNavarhDataSet = class(TZQuery)
        private
      ....
          constructor Create(AOwner: TComponent); override;
        published
          property Provider: TRawDataIBDataSet read FProvider;
        end;
        
        
      constructor TNavarhDataSet.Create(AOwner: TComponent);
      begin
        inherited;
        FProvider := TRawDataIBDataSet.Create(self);
        FProvider.SetSubComponent(true);
        Connection := Provider.DataBase;
      end;

    Для удобства работы создал свой обработчик свойства.
    ExpandedWrap disabled
        TOptionsProviderProperty = class(TPropertyEditor)
        private
          procedure GetPropProc(const Prop: IProperty);
        public
          function GetAttributes: TPropertyAttributes; override;
          procedure GetProperties(Proc: TGetPropProc); override;
          function  GetValue: string; override;
        end;
       
      //{ TOptionsProviderProperty }
      function TOptionsProviderProperty.GetValue: string;
      var
        Obj: TPersistent;
      begin
        Obj := GetComponent(0);
        if Assigned(Obj) and (Obj is TNavarhDataSet) then
          with TNavarhDataSet(Obj).Provider do
          begin
            Result := '['+RequestName+']';
          end
           else Result := '(Provider)';
      end;
       
      function TOptionsProviderProperty.GetAttributes: TPropertyAttributes;
      begin
        Result :=  [paMultiSelect, paSubProperties];
      end;
       
      procedure TOptionsProviderProperty.GetProperties(Proc: TGetPropProc);
      var
        I: Integer;
        J: Integer;
        Components: IDesignerSelections;
      begin
        Components := TDesignerSelections.Create;
        for I := 0 to PropCount - 1 do
        begin
          J := GetOrdValueAt(I);
          if J <> 0 then
            Components.Add(TComponent(GetOrdValueAt(I)));
        end;
        if Components.Count > 0 then
        begin
          GetComponentProperties(Components, [tkMethod, tkLString, tkClass] , Designer, Proc);
        end;
      end;
       
       
      procedure Register;
      begin
        RegisterPropertyEditor(TypeInfo(TRawDataIBDataSet), TNavarhDataSet, 'Provider', TOptionsProviderProperty);
      end;
    Но проявился изъян. в субкомпоненте не показываются события. (OnWorkBegin, OnWorkEnd, OnWork, OnError)

    хотя в
    ExpandedWrap disabled
      GetComponentProperties(Components, [tkMethod, tkLString, tkClass] , Designer, Proc);
    я их учел
    если убрать TOptionsProviderProperty то нормально.
    Если GetComponentProperties() подставить свою процедуру вместо Proc и в ней меседжом вывести все имена свойств то методы туда попадают.
    Так почему они не отображаются.
      Унаследуйтесь от TComponentProperty или внимательно разбирайтесь с интерфейсом IReferenceProperty
        Цитата DimaBr @
        Унаследуйтесь от TComponentProperty
        То что нужно.
        и почему я его сам не увидел :unsure:
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0418 ]   [ 16 queries used ]   [ Generated: 3.05.24, 03:52 GMT ]