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

Вниз

Классы и наследование   Найти похожие ветки 

 
_юзер_   (2003-12-29 17:15) [0]

Предположим есть 2 класса:

TClass1 = class(TComponent)
private
procedure Method1;
procedure Method2;
...
protected
Color: TColor read FColor write FColor;
end;


и

TClass2 = class(TComponent)
private
FClass1: TClass1;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
Class1: TClass1 read FClass1;
end;


implementation

constructor TClass2.Create(AOwner: TComponent);
begin
inherited;

Class1:=TClass1.Create(Self);
...
end;

destructor Destroy;
begin
Class1.Free;

inherited;
end;

как мне написать потомка от TClass2, чтобы свойство Color класса TClass1 можно было редактировать в Object Inspector?


 
alex_*** ©   (2003-12-29 17:20) [1]

в классе TClass2 сделать свой Color, который будет вызывать Color у FClass1


 
_юзер_   (2003-12-29 17:21) [2]

не получится - Color у FClass1 находится в protected


 
KSergey ©   (2003-12-29 17:23) [3]

в протектед - значит описать все это в одном юните ;)


 
_юзер_   (2003-12-29 17:25) [4]

компоненты не мои - я хочу наследника написать. так что описать всё в одном юните отпадает.


 
Agent13   (2003-12-29 17:27) [5]

>_юзер_ (29.12.03 17:21) [2]
>не получится - Color у FClass1 находится в protected

Почему не получится? Если я не путаю, декларация протектед позволяет вызывать свойство компонента из дочерних компонентов, где бы они ни были описаны.


 
alex_*** ©   (2003-12-29 17:28) [6]

для Class1 написать своего наследника, у которого Color перейдет в public


 
Amoeba ©   (2003-12-29 17:28) [7]


> в протектед - значит описать все это в одном юните ;)

Неправда:
A protected member is visible anywhere in the module where its class is declared and from any descendant class, regardless of the module where the descendant class appears. In other words, a protected method can be called, and a protected field or property read or written to, from the definition of any method belonging to a class that descends from the one where the protected member is declared. Members that are intended for use only in the implementation of derived classes are usually protected.


 
_юзер_   (2003-12-29 17:30) [8]

2Agent13:
вот именно - из дочерних. а у меня пока никаких дочерних классов нету.


 
KSergey ©   (2003-12-29 17:31) [9]

могу предложить такой "трюк"

type
TClass1Freind = class(TClass1)
...

TClass2_2 = class(TClass2)
...
published
Color:...
end;

....

TClass2_2.SetColor (AColor:...)
begin
...
TClass1Freind(Class1.Color) := AColor;
...
end;

аналогично с чтением


 
_юзер_   (2003-12-29 17:31) [10]

2alex_***:
перейдёт-то - перейдёт (только в published, если точнее). а дальше что?


 
alex_*** ©   (2003-12-29 17:32) [11]

а что есть? Class2 есть в исходниках?


 
KSergey ©   (2003-12-29 17:32) [12]

В самом начале читать:

type
TClass1Freind = class(TClass1) ;

А вообще я такие определения вставляю прямо перед соотв. методом (здесь, например, TClass2_2.SetColor). Хотя это уже по вкусу.


 
KSergey ©   (2003-12-29 17:33) [13]

И еще
Вместо

TClass1Freind(Class1.Color) := AColor;

читать

TClass1Freind(Class1 ).Color := AColor;

сорри, торопился


 
_юзер_   (2003-12-29 17:34) [14]

в исходниках есть всё. только я чужие исходники править не хочу, потому как они чужие.


 
alex_*** ©   (2003-12-29 17:38) [15]

тогда придется сделать своего наследника Class2, которого прописать Color.


 
_юзер_   (2003-12-29 17:38) [16]

2KSergey:
ok - сейчас попробую


 
_юзер_   (2003-12-29 17:45) [17]

2KSergey:
спасибо - работает.



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

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

Наверх




Память: 0.5 MB
Время: 0.024 c
14-37869
DCoder
2003-12-22 17:14
2004.01.13
Порекомендуйте почтовый сервер


3-37495
Игоряныч
2003-12-17 12:51
2004.01.13
Как коненектится через BDE к mdb - файлу


1-37735
Evgeny78
2003-12-30 13:06
2004.01.13
OLE Automation


1-37716
MScorp
2003-12-30 17:58
2004.01.13
Вывод текста в консоль


4-37978
Vovchik
2003-11-02 15:39
2004.01.13
Как перехватить событие смены активного окна?