Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.05 c
10-1095424935
AlexXn
2004-09-17 16:42
2005.07.11
Подключение tlb к проекту


5-1089198820
RagE
2004-07-07 15:13
2005.07.11
не срабатывает таймер


14-1118090886
ArMellon
2005-06-07 00:48
2005.07.11
Как сделать чтобы не могли тянуть с моего eMule


6-1112615487
NikeOLD
2005-04-04 15:51
2005.07.11
Можно ли получить список модемов не используя реестр (как?)


3-1116913933
yk
2005-05-24 09:52
2005.07.11
Как узнать имеет ли пользователь право на табл/процед





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский