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

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

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Компонент с изменяющимся в инспекторе полем-компонентом
    В компонентах DevExpressVCL есть замечательная особенность - колонка TcxGridColumn в TcxGridTableView имеет свойство с именем "Properties", которое раскрывается как список возможных TcxCustomEditProperties, напимер, DateEdit, CalcEdit, Label и т.д. При этом в инспекторе подставляется соответвующий наследник от TcxCustomEditProperties со свойствами специфическими для выбранного из выпадающего списка.
    Я понимаю, что для реализации такого же в своих компонентах нужно использовать RegisterPropertyEditor, но пока все попытки оказались безуспешными.
    Копание в исходниках DevExpressVCL не помогло - выделить оттуда суть не получилось. Документация и поиск - понимания не добавило.

    Может быть есть у кого пример или ссылка на суть реализации?
      Суть реализации например такова: есть два свойства.
      1-е свойство - свойство перечислимого типа (целое, стринговое, дата, и т.д.)
      2-е свойство - свойство базового класса (или TPersistent)
      При переключении 1-го свойства, уничтожается второе свойство и создаётся новое с новым типом.
      ExpandedWrap disabled
        type
        TTypeProp = (tInteger,tString,tData);
        TBasisType = class(TPersistent);
         
        TIntegerProp = class(TBasisType)
          published
            property ValueInt: integer read fValueInt write fValueInt;
        end;
         
        TStringProp = class(TBasisType)
          published
            property ValueStr: string read fValueStr write fValueStr;
        end;
         
        TMyComponent = class(TComponent)
          published
            property TypeProp: TTypeProp reaf fTypeProp write SetTypeProp;
            property Prop: TBasisType read fProp write SetProp;
        end;
         
        procedure TMyComponent.SetTypeProp(Value: TTypeProp);
        begin
          if fTypeProp = Value then Exit;
          fProp.Free;
          fTypeProp := Value;
          case Value of
            tInteger: fProp := TIntegerProp.Create;
            tString: fProp := TStringProp.Create;
          end;
        end;
         
        procedure TMyComponent.SetProp;
        begin
          // пусто
        end;
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0226 ]   [ 17 queries used ]   [ Generated: 29.03.24, 00:17 GMT ]