Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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) я второй раз вижу у тебя бесмысленную конструкцию насчет
Цитата SkAndriy @
property IndexElement : Integer read GetIndex write fIndex;

зачем write fIndex если fIndex все равно не юзается.

вот за подобных вещей и падает
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Result := fSearch.IndexList;
Сначала нужно проверить компонент на существование а потом получать значение от 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
Еще раз спасибо.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)