Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 636
от 31.10.2006, 02:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 398, Экспертов: 67
В номере:Вопросов: 1, Ответов: 1


Вопрос № 60145: Здравствуйте уважаемые эксперты! Я разрабатываю свой компонент для Delphi7, в связи с этим у меня несколько вопросов: 1) Как созать свойство наследник от TCollection? 2) Компонент имеет несколько свойств наследников TWinControl, по логике...

Вопрос № 60.145
Здравствуйте уважаемые эксперты!
Я разрабатываю свой компонент для Delphi7, в связи с этим у меня несколько вопросов:
1) Как созать свойство наследник от TCollection?
2) Компонент имеет несколько свойств наследников TWinControl, по логике программы, при добавлении некоторых из них другие должны очищаться, как это коректно сделать?
3) В дополнении к вопросу №2, При удалении компонента с которыйм свя зан мой, Delphi вылетает с переполнением стека, как с этим можно боротся и победить?
Отправлен: 25.10.2006, 16:03
Вопрос задал: Monah (статус: 5-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Mexes
Здравствуйте, Monah!
1) А в чем, собственно, проблема? Создавайте свой класс-наследник TCollection (хотя я рекомендую создавать от TOwnedCollection - а иначе у меня были проблемы с отображением в Object Inspector вложенных коллекций), к нему делайте опубликованное свойство. Будет отображаться в инспекторе объектов, редактироваться привычным образом (окно со списоков, в котором представлены элементы коллекции). Ну и понадибится еще потомок TCollectionItem, которые Вы будете хранить в этой коллекции.

2) Что значит очищаться? Уничтожать связанные объекты при установке значения какого-то свойства? Почему бы тогда просто их не уничтожить методом Free? Не уверен, что я правильно понял твой вопрос...

3) Когда Вы свзяываете поле с компонентом, вызовите у последнего FreeNotification(self), где self - это разрабатываемый компонент. Он будет слать оповещение об уничтожении. Необходимо будет перекрыть обработчик этого оповещения - метод Notification. В частности, TControl для сброса на nil свойст PopupMenu и Action это делает так:

procedure TControl.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if Operation = opRemove then
if AComponent = PopupMenu then PopupMenu := nil
else if AComponent = Action then Action := nil;
end;

Аналогичным образом сбросите на nil свои поля.
Ответ отправил: Mexes (статус: 4-ый класс)
Ответ отправлен: 25.10.2006, 17:03


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное