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

Вниз

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

 
_юзер_   (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;
Скачать: [xml.tar.bz2];

Наверх




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


1-37772
sergwolf
2003-12-26 07:42
2004.01.13
Скиньте пожалуста пример файлового менеджера


14-37906
Undert
2003-12-20 18:54
2004.01.13
Хороший дефрагментатор ...


1-37661
Roman_kv
2003-12-26 17:01
2004.01.13
Grid со скролом не по колонке


1-37651
Эдуард
2003-12-26 11:32
2004.01.13
Создание компонента в DLL





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