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

Вниз

Событие вложенного объекта в Object Inspector   Найти похожие ветки 

 
AndreyAs   (2003-05-22 18:28) [0]

Помогите, пожалуйста. Застопорился на вроде бы простой вещи.
Пишу компонент. У него есть свойство-объект.
У этого объекта есть некоторые свойства и события.
Свойства отображаются в Object Inspector как и полагается: появляется плюсик и каждое свойство можно отредактировать. А событие не появляется.
Пытался разобраться по исходникам VCL (например, такое можно наблюдать у компонента TSimpleDataSet, который содержит объект Connection), но все вроде бы так как и у меня. Help me please!
Заранее большое спасибо за советы.


 
vuk   (2003-05-22 18:47) [1]

Свойства и события можно будет смотреть только у наследников TComponent. Для этого нужно у этого компонента установить флаг стиля csSubComponent вызовом SetSubComponent. Для лучшего понимания посмотрите, как это реализовано в TLabeledEdit.


 
Dimka Maslov   (2003-05-22 19:13) [2]

Простейший способ - в основном компоненте описать события, аналогичные событиям вложенного компонента, и вызывать их при необходимости из вложенного компонента

пример

class
TSubComponent = class;

TUpComponent = class (TComponent)
private
FSubComponent: TSubComponent;
procedure SubComponentEvent(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
SubComponent: TSubComponent read FSubComponent;
property OnSubComponentEvent: TNotifyEvent read FOnSubComponentEvent write SetOnSubComponentEvent;
end;

TSubComponent = class (TComponent)
private
procedure Event;
published
property OnEvent: TNotifyEvent read FOnEvent write SetOnEvent;
end;

....

procedure TUpComponent.SubComponentEvent(Sender: TObject);
begin
if Assigned(FOnSubComponentEvent) then
FOnSubComponentEvent(Self);
end;

constructor TUpComponent.Create(AOwner: TComponent);
begin
inherited;
FSubComponent := TSubComponent.Create(Self);
FSubComponent.OnEvent := SubComponentEvent;
end;

destructor TUpComponent.Destroy;
begin
FSubComponent.Free;
inherited;
end;

procedure TSubComponent.Event;
begin
if Assigned(FOnEvent) then
FOnEvent(Self)
end;



А вот при наступлении события в SubComponent просто вызывай его метод Event


 
vuk   (2003-05-22 19:21) [3]

to Dimka Maslov:
>Простейший способ
Начиная с D6 этот способ не является простейшим. :o) Использование SubComponent намного удобнее. И для программирования и для пользователя компонента.


 
AndreyAs   (2003-05-22 19:46) [4]

Спасибо Dimka Maslov ©,
но мне все-таки необходимо иметь это событие у sub-компонета, а не у главного.

И огромное спасибо vuk ©!
Я перерыл все исходники, имеющиеся в наличии и закопался по уши, совсем забыв, что то же самое есть у такого простого и хорошего компонета как TLabelededEdit.
Все получилось, спасибо еще раз!


 
vuk   (2003-05-22 19:51) [5]

Кстати, абсолютно точно так же, как у TLabeledEdit (с порождением специального потомка для вложенного компонента) делать не обязательно. Достаточно просто в основном компоненте при создании вложенного вызвать у него SetSubComponent.



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

Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.008 c
14-3174
Kirill
2003-05-08 17:43
2003.06.02
7-zip


6-3027
Levova
2003-04-02 15:00
2003.06.02
TIdSMTP и TIdMessage...


1-2854
Pavor
2003-05-21 07:42
2003.06.02
Странности Application.Terminate (или может мои? :)


1-2985
pirat
2003-05-20 22:10
2003.06.02
Подскажите пожалуйста, как повесить форму в отдельный поток?


1-2899
AndreyAs
2003-05-22 18:28
2003.06.02
Событие вложенного объекта в Object Inspector





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