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

Вниз

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

 
Ф-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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.05 c
3-1128317628
RUYurik
2005-10-03 09:33
2005.11.13
IBReplicator


2-1129226653
Delphman
2005-10-13 22:04
2005.11.13
Сравнение двоичных чисел


2-1129659571
Алексей2
2005-10-18 22:19
2005.11.13
Сложение,вычитание


2-1130349637
XeON
2005-10-26 22:00
2005.11.13
Как скрыть главную форму?


6-1120208556
Dust
2005-07-01 13:02
2005.11.13
TCPDUMP или чтонить ещё





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