Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Delphi: Разработка компонентов > Ошибка при отключении первого компонента от второго. |
Автор: SkAndriy 28.08.10, 18:54 |
Добрый вечер! Создаю два компонента, второй должен увидеть первый компонент и читать его свойства. Схема кода второго компонета: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> unit MyComponent2; interface uses Windows, Messages, SysUtils, Variants, Classes, Unit2; type TMyComponent2 = class(TComponent) private fIndex : Integer; fSearch : TMyComponent; function GetIndex : Integer; protected //............... public constructor Create(AOwner: TComponent);override; destructor Destroy;override; published property SearchClass : TMyComponent read fSearch write fSearch; property IndexElement : Integer read GetIndex write fIndex; end; procedure Register; implementation { TMyComponent } constructor TMyComponent2.Create(AOwner: TComponent); begin fSearch := TMyComponent.Create(Self); inherited; end; destructor TMyComponent2.Destroy; begin fSearch.Free; inherited; end; function TMyComponent2.GetIndex : Integer; begin Result := fSearch.IndexList; end; procedure Register; begin RegisterComponents('test', [TMyComponent2]); end; В дизайнтайм есть поле у второго компонета со свойством SearchClass типа раскрывающегося списка. Когда кладу на форму нового проекта оба компонента, то у компонента TMyComponent2 в выпадающем списке свойства SearchClass регистрируется первый компонент и его можно выбрать после чего прекрасно читаются все его свойства. Но, проблема в том, что если очистить поле свойства SearchClass второго компонента в дизайнтайм вылетает ошибка, при которой виснет даже сама Делфи 2010. Подскажите как избежать этой ошибки? Я понимаю, что нужно проверить есть связьвторого компонента с первым и очистить все читаемые от первого компонента параметры с его доступных свойств, но как это сделать? Спасибо всем за помощь. |
Автор: ViktorXP 28.08.10, 19:19 |
1) я второй раз вижу у тебя бесмысленную конструкцию насчет зачем write fIndex если fIndex все равно не юзается. вот за подобных вещей и падает <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Сначала нужно проверить компонент на существование а потом получать значение от IndexList Result := fSearch.IndexList; |
Автор: SkAndriy 28.08.10, 19:24 |
Нет проблема не в этом. Как раз свойство прекрасно читает в IndexElement из первого компонента. Проблема в том, что если я сотру (удалю, очищу) в дизайн тайм поле свойства SearchClass и переведу фокус например на другое поле то вылетает ошибка и делфи виснет. что делать? какую и где поставить проверку. спасибо |
Автор: SkAndriy 28.08.10, 19:26 |
Вы были правы не хватало элементарной проверки. Спасибо за помощь. |
Автор: ViktorXP 28.08.10, 19:27 |
это типа: Моя газовая плита хорошо работает но как только я перекрою газ и посмотрю в окно то она гаснет. |
Автор: SkAndriy 28.08.10, 19:37 |
Еще раз спасибо. |