Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Ошибка при добавлении свойства компоненту   Найти похожие ветки 

 
Ф-1   (2005-03-02 12:36) [0]

Господа , помогите пожалуйста!
Среда - Delphi 7.
Написал свой визуальный компонент. Потомок PaintBox. Специальные графики рисовать. ПОставил на форму, написал код, откомпилял. Всё работает как надо. Потом потребовалось добавить новое свойство компоненту. Добавил property, соответсвующую ему переменную. Описал точь в точь как те, которые были с самого начала. Компиляю - всё нормально. А когда запускается - ошибка: "Exception EReadError in module XXX.exe at 0002221B.Error reading YYY1.ZZZ:Property ZZZ does not exist". YYY1 - имя компонента, ZZZ - имя нового свойства.Что только я не делал - удалял с формы, удалял с панели компонентов, компилял компонент заново с нуля, потом устанавливал в дельфи, потом только помещал опять на форму - то же самое. Вопрос - как победить?


 
Reindeer Moss Eater ©   (2005-03-02 13:05) [1]

Убери свойство из секции published


 
Ф-1   (2005-03-02 13:26) [2]

А как тогда редактировать его значение в Design Time?


 
Юрий Зотов ©   (2005-03-02 13:51) [3]

Похоже, какое-то дублирование файлов у Вас получилось. Сделайте поиск и удалите все файлы "Имя_модуля_компонента.DCU", а потом перекомпилируйте пакет.

И если у свойства ZZZ возможен описатель default, то проставьте его.


 
Reindeer Moss Eater ©   (2005-03-02 13:55) [4]

А как тогда редактировать его значение в Design Time?

Вопрос был:
Вопрос - как победить?


 
Ф-1   (2005-03-02 13:56) [5]

Перенёс в Public, а свойство вообще исчезло, как в Design так и в Run time. А когда было в Published, то в Object Inspector отображалось и можно было менять значение, но при запуске программы - ошибка.
Вот кусок кода
...
TSeysmBox = class(TPaintBox)
 private
   ...
   N_CHan : word ;  
   N_D_CHan : word; // Вновь добавленное поле для нового свойства
   ...
   procedure SetNCHan(const inval:word); //Обработчики для установки
   procedure SetNDCHan(const inval:word);//значений свойств
 protected
   ...
 public
   constructor Create(AOwner:TComponent);override;
   ...
 published
   ...
   property N_CHannels : word read  N_CHan write SetNCHan;
   property N_DChan : word read  N_D_CHan write SetNDCHan; //Новое свойство
   ...
end;
implementation
   ...
   constructor TSeysmBox.Create(AOwner:TComponent);
    var i : integer;
    begin
     ...
     inherited Create(AOwner);
     N_Chan := 48;
     N_D_CHan := 2;
     ...
     setlength(ShowCHannels,N_CHAN+N_D_CHan);
     for i := 0 to N_CHan - 1 + N_D_CHan do ShowChannels[i] := true;
     setlength(SeismData,(N_CHAN+N_D_CHan));
     setlength(MaxValues, (N_CHAN+N_D_CHan));
     setlength(Mnozh, (N_CHAN+N_D_CHan));
     ...
   end;
   ...
   Procedure TSeysmBox.SetNCHan(const Inval:word);
    var i : integer;
    begin
      setlength(ShowCHannels,0);
      setlength(SeismData,0);
      setlength(MaxValues,0);
      setlength(Mnozh,0);
      setlength(ShowCHannels,(Inval+N_D_CHan));
      for i := 0 to Inval -1 +N_D_CHan do ShowChannels[i] := true;
      setlength(SeismData,(Inval+N_D_CHan));
      setlength(MaxValues, (Inval+N_D_CHan));
      setlength(Mnozh, (Inval+N_D_CHan));
      N_CHan := inval;
   end;
  Procedure TSeysmBox.SetNDCHan(const Inval:word);
   var i : integer;
   begin
     setlength(ShowCHannels,0);
     setlength(SeismData,0);
     setlength(MaxValues,0);
     setlength(Mnozh,0);
     setlength(ShowCHannels,(Inval+N_CHan));
     for i := 0 to N_CHan -1 +Inval do ShowChannels[i] := true;
     setlength(SeismData,(Inval+N_CHan));
     setlength(MaxValues, (Inval+N_CHan));
     setlength(Mnozh, (Inval+N_CHan));
     N_D_CHan := inval;
   end;
...


 
Юрий Зотов ©   (2005-03-02 13:57) [6]

Забыл добавить - и проверяйте работу обновленного компонента на совершенно новом проекте.


 
Reindeer Moss Eater ©   (2005-03-02 13:57) [7]

Перенёс в Public, а свойство вообще исчезло, как в Design так и в Run time.

Это обман зрения.


 
Юрий Зотов ©   (2005-03-02 14:03) [8]

property N_CHannels: word read N_CHan write SetNCHan default 48;
property N_DChan: word read N_D_CHan write SetNDCHan default 2;

А потом - убить все старые DCU, все перекомпилировать и проверять на новом проекте. Если ошибка не исчезнет, поставить точки останова в обоих методах Set, запустить проект и пройти отладчиком, чтобы выяснить точное место ошибки.


 
Reindeer Moss Eater ©   (2005-03-02 14:06) [9]

Видимо он уже закомпилил компонент в пакет.
После чего меняет его код, и пересобирает проект, в ходе сборки которого пакет остается неизмененным.

Нарушил в общем важнейшую заповедь.
Не инсталить компонент в процессе его написания и отладки.
Отсюда и "обманы зрения".


 
Ф-1   (2005-03-02 14:15) [10]

Всем спасибо! Было два SeysmBox.DCU. В папке основного проекта и в папке пректа компонента. Всё убил, компонент скомпилял заново, вставил его заново в основную форму, в путях поиска сомпилятора указал папку с проектом компонента. Всё заработало!

>>Нарушил в общем важнейшую заповедь.
Не инсталить компонент в процессе его написания и отладки.<<

Дык, специфика такая. Программа пишется под железо. Появилась новая версия железа - компоненту стало нехватать свойств.
Ещё раз большое спасибо!


 
pasha_golub ©   (2005-03-03 13:50) [11]

Reindeer Moss Eater ©   (02.03.05 14:06) [9]

Вот честно, очень удивился написаному. У меня набор компонентов в пакете (установлен в ИДЕ), я их на лету меняю, потом перекомпилирую и все работает на "ура". И ни разу на грабли не наступал. Скажите, что я делаю не так? ;-)



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

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
14-1129816532
BerkeleyMan
2005-10-20 17:55
2005.11.13
Москва


4-1126704429
NikNet
2005-09-14 17:27
2005.11.13
Узнать куда путь куда обращ. Explorer?


1-1130303194
vit74
2005-10-26 09:06
2005.11.13
фиксированное положение окна формы


14-1129756232
Германн
2005-10-20 01:10
2005.11.13
Блиц-опрос на тему компилляторов


4-1126619198
Erik1
2005-09-13 17:46
2005.11.13
Как получить статус процесса?