Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Как сделать один компонент частью другого?   Найти похожие ветки 

 
GrayFace ©   (2004-06-21 11:02) [0]

Чтобы редактировался в Property Editor"е, как, например, ScrollBar. В ComponentState есть такое свойство, только ComponentState - ReadOnly property.


 
Некто   (2004-06-22 15:53) [1]

1. В компоненте-контейнере сделать publised свойство со ссылкой на вложенный компонент.

2. Написать редактор этого свойства, отнаследовав его от TClassProperty.


 
GrayFace ©   (2004-06-22 17:37) [2]

Нет. Как-то можно легче. Как со скроллбарами: жмешь на плюс и видишь содержимое внутреннего компонента.


 
Mim1 ©   (2004-06-22 18:01) [3]

TControlScrollBar - наследник TPersistent, как и TFont и т.п. Для наследников этого класса в инспекторе обьектов свойства разварачиваются.
Наследники же TCOntrol сохраняются в поток в качестве ссылки.


 
Некто   (2004-06-23 14:20) [4]

> GrayFace ©   (22.06.04 17:37) [2]
> жмешь на плюс и видишь содержимое внутреннего компонента.

Не компонента, а объекта, НЕ являющегося компонентом. То есть, потомка TPersistent, но не TComponent.

Это происходит потому, что для таких объектов редактором по умолчанию является TClassProperty - вот он-то и дает тот самый раскрывающийся плюсик и список подсвойств. А для компонентов редактором по умолчанию является TComponentProperty, который никаких плюсиков не дает, а дает комбобокс со списком лежащих на форме компонентов, подходящих по классу свойства.

Вы же хотите, чтобы плюсик и список подсвойств появлялся именно у компонентского свойства - значит, Вам нужно заменить для этого свойства один стандартный редактор другим.

О чем и было сказано. И вряд ли стоит спешить с категоричными "нет" - полезнее было бы сначала разобраться в сути вопроса.

Впрочем, дело хозяйское.


 
GrayFace ©   (2004-06-27 06:24) [5]

А как это сделать? И еще, как менять меню, которое выскакивает при клике по компоненту правой кнопкой?


 
Mim1 ©   (2004-06-28 12:07) [6]


>  [5] GrayFace ©   (27.06.04 06:24)
> А как это сделать?

создаеш наследник tpersistent и в путь

> И еще, как менять меню, которое выскакивает при клике по
> компоненту правой кнопкой?


unit CkgComponent;

interface

uses
 Classes;

type
 TCkgComponent = class(TComponent)
 public
 published
 end;

Procedure Register;

implementation

uses CkgCompEditor, DesignIntf;

Procedure Register;
begin
 RegisterComponentEditor(TCkgComponent, TCkgComponentEditor);
end;

end.

unit CkgCompEditor;

interface

uses
 DesignEditors;

type
 TCkgComponentEditor = class(TDefaultEditor)
 public
   procedure ExecuteVerb(Index: Integer); override;
   function GetVerb(Index: Integer): string; override;
   function GetVerbCount: Integer; override;
 end;

implementation

uses QDialogs, CkgConst;

{ TCkgComponentEditor }

procedure TCkgComponentEditor.ExecuteVerb(Index: Integer);
begin
 case Index of
   0 : ShowMessage("Доброе утро страна!"+lb+"Mim");
 end;
end;

function TCkgComponentEditor.GetVerb(Index: Integer): string;
begin
 case Index of
   0: Result := "Нажми меня :).";
 end;
end;

function TCkgComponentEditor.GetVerbCount: Integer;
begin
 Result := 1;
end;

end.


 
GrayFace ©   (2004-06-29 07:18) [7]

>заменить для этого свойства один стандартный редактор другим
Как это сделать?


 
Юрий Зотов ©   (2004-06-29 13:30) [8]

GrayFace ©   (29.06.04 07:18) [7]
>> заменить для этого свойства один стандартный редактор другим
> Как это сделать?

Просто добавить в процедуру Register одну-единственную строчку - вызов RegisterPropertyEditor. Вот полный, работающий пример.

uses
 Classes,
 DesignIntf, DesignEditors; // Это для D6 и выше.
 // DsgnIntf; // А это для для D5 и ниже.

type
 TMyComponent = class(TComponent)
 private
   FComp: TComponent;
   procedure SetComp(const Value: TComponent);
 public
   constructor Create(AOwner: TComponent); override;
 published
   property Comp: TComponent read FComp write SetComp;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Samples", [TMyComponent]);
 RegisterPropertyEditor(TComponent.ClassInfo, TMyComponent, "Comp", TClassProperty)
end;

{ TMyComponent }

constructor TMyComponent.Create(AOwner: TComponent);
begin
 inherited;
 FComp := TComponent.Create(Self)
end;

procedure TMyComponent.SetComp(const Value: TComponent);
begin
 FComp.Assign(Value)
end;


 
GrayFace ©   (2004-07-10 11:40) [9]

Если подключаю DesignEditors(в нем описана TClassProperty), Делфя 7 ругается, что нету proxies.pas


 
Mim1 ©   (2004-07-10 14:16) [10]


> [9] GrayFace ©   (10.07.04 11:40)
> Если подключаю DesignEditors(в нем описана TClassProperty),
> Делфя 7 ругается, что нету proxies.pas


Вам сюда http://delphimaster.net/view/15-1089200045/


 
GrayFace ©   (2004-07-11 13:38) [11]

Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.105 c
1-1118770859
Starcom
2005-06-14 21:40
2005.07.11
Build with Runtime packages


1-1118420101
Pav
2005-06-10 20:15
2005.07.11
Работа с файлами в Delphi


14-1118118178
Тульский
2005-06-07 08:22
2005.07.11
Word 2000 во всей красе


14-1118808521
DelphiN!
2005-06-15 08:08
2005.07.11
Защита от ICQ снифа в локалке


14-1118386593
Гарри Поттер
2005-06-10 10:56
2005.07.11
удаление NAV