![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать один компонент частью другого?
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.