Главная страница
    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.042 c
1-1118405219
WondeRu
2005-06-10 16:06
2005.07.11
Как передать динамическую структуру из DLL в программу?


6-1112854660
v-o-y-a-g-e-r
2005-04-07 10:17
2005.07.11
Определение пользователя залогированного на машине...


1-1119602054
Леша
2005-06-24 12:34
2005.07.11
Изменение ситемной даты


14-1118042509
Кирилл
2005-06-06 11:21
2005.07.11
Скачать звуки


1-1119345680
ShotGuN
2005-06-21 13:21
2005.07.11
Проблемы в OLE MS Outlook





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский