Свойство default в компоненте

Juve
Дата: 09.10.2006 11:20:33
Уважаемые мастера!
Подскажите пожалуйста, есть у меня свой компонент. У него свойство - коллекция. Можно ли двойным кликом на компонент открывать редактор этой самой коллекции, то есть сделать коллекцию свойством по умолчанию. Когда пишу так:
    property Controls: TControlPropertys read FControls write SetControls; default;
ругается и говорит что default property must be an array property.
Спасибо!
Shr
Дата: 09.10.2006 11:23:23
Двойной клик и св-во по умолчанию - это разные вещи.
DimaBr
Дата: 09.10.2006 11:27:58
зарегистрируйте для компонента такой редактор
TColunmEditor = class(TComponentEditor)
 private
   FPropInfo: PPropInfo;
   FPropEdit: IProperty;
   procedure GetPropProc(const PropEdit: IProperty);
 public
   constructor Create(AComponent: TComponent; ADesigner: IDesigner); override;
   procedure ExecuteVerb(Index: Integer); override;
   function GetVerb(Index: Integer): string; override;
   function GetVerbCount: Integer; override;
   function GetPropertyName:string; virtual;
 end;


{ TColunmEditor }
//  редактор свойства - коллекции (возвращаем имя свойства)
function TColunmEditor.GetPropertyName: string;
begin //
end;

constructor TColunmEditor.Create(AComponent: TComponent; ADesigner: IDesigner);
begin
  inherited;
  FPropInfo := GetPropInfo(GetComponent.ClassInfo, GetPropertyName, [tkClass])
end;

procedure TColunmEditor.GetPropProc(const PropEdit: IProperty);
begin
  if PropEdit.GetPropInfo = FPropInfo then FPropEdit := PropEdit
end;

procedure TColunmEditor.ExecuteVerb(Index: Integer);
var Selections: TDesignerSelections;
begin
  case Index of
   0: begin
        if (FPropEdit = nil) and (FPropInfo <> nil) then begin
          Selections := TDesignerSelections.Create;
          try
            Designer.GetSelections(Selections);
            GetComponentProperties(Selections, [tkClass], Designer, GetPropProc)
          finally
            Selections.Free
          end;{try}
        end;{if}
        if FPropEdit <> nil then FPropEdit.Edit
      end
   else inherited;
  end;{case}
end;

function TColunmEditor.GetVerb(Index: Integer): string;
begin
  case Index of
    0: Result := GetPropertyName+' Editor...';
    else Result := inherited GetVerb(Index);
  end;
end;

function TColunmEditor.GetVerbCount: Integer;
begin
  Result := inherited GetVerbCount + 1;
end;
Juve
Дата: 09.10.2006 11:37:54
Понял, а можно ли двойными кликом заставить открыться редактор коллекции?
Juve
Дата: 09.10.2006 11:39:11
Сорри, не заметил поста DimaBr , сейчас буду разбираться, спасибо!!!
Juve
Дата: 09.10.2006 12:34:21
Все работает, DimaBr, примного благодарен!
sobolenok.2004
Дата: 05.04.2011 10:41:45
Здравствуйте! не хочу заводить новую ветку, тк проблема похожая: есть TActionList как private переменная фрейма (временно сделал его published), как вызвать TComponentEditor этого TActionList из меню либо из ObjectInspector фрейма? заранее спасибо.

по схеме DimaBr не работает, просто ничего не показывается.
DimaBr
Дата: 05.04.2011 11:32:39
Всё прекрасно работает без всякого дополнительного кода
sobolenok.2004
Дата: 05.04.2011 11:42:44
DimaBr
Всё прекрасно работает без всякого дополнительного кода

извините, мб я что то не так сделал?

function TColunmEditor.GetPropertyName: string;
begin //
end;

должна вернуть имя свойства? то есть просто ActionList - которое является указателем на переменную фрейма?
DimaBr
Дата: 05.04.2011 11:45:42
Услышьте меня. БЕЗ ВСЯКОГО ДОПОЛНИТЕЛЬНОГО КОДА. Без написанного выше - тоже.