Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


GrayFace ©   (2004-06-21 11:02:00) 

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


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

Спасибо.


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


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


Вам сюда http://www.delphimaster.ru/cgi-bin/forum.pl?id=1089200045&n=3


GrayFace   (2004-07-10 11:40:00) [3]

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


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

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-06-29 07:18:00) [5]

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


Mim1   (2004-06-28 12:07:00) [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-27 06:24:00) [7]

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


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

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

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

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

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

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

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


Mim1   (2004-06-22 18:01:00) [9]

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


GrayFace   (2004-06-22 17:37:00) [10]

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


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

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо