Lazarus. EReadError с сообщением Invalid value for property

Ghost Writer
Дата: 14.01.2020 16:14:35
прикрутил к своему контролу коллекцию (потомок TCollection), у итемов сделал событие OnClick (TButtonClickNotifyEvent = procedure(Sender: TObject; var AHandled: Boolean) of object)

проблема в том, что если удалить код внутри процедуры OnClick (пример:)
procedure TForm1.MyControl1ButtonsItem6Click(Sender: TObject; var AHandled: Boolean); 
begin

end;

затем нажать компилировать или сохранить, то пустые процедуры из юнита удаляются, а из .LFM нет.
В инспекторе объектов остается ссылка на MyControl1ButtonsItem6Click и проект не компилируется с ошибкой. Приходится удалять в инспекторе руками.
Почему может так происходить ?
wadman
Дата: 14.01.2020 16:23:42
Бета, транк?

В 1.9 на моем wcthread у итемов нормально подчищается.
Ghost Writer
Дата: 14.01.2020 16:29:00
wadman,

1.8.4
Ghost Writer
Дата: 15.01.2020 07:55:25
wadman,

в твоём wcthread (версия от 10.07.2017) - TOwnedList = class(TList) + TTask = class(TComponent)
у TCollectionItem, в отличии от TComponent, нет свойства Name. Я думаю, проблема связана с этим.
Ghost Writer
Дата: 15.01.2020 11:33:11
Ghost Writer
нет свойства Name. Я думаю, проблема связана с этим
похоже, это тут ни при чем.

Нашел компоненты с точно такой проблемой. TECGrid (Eye Candy Controls), у него колонки тоже от TCollectionItem и имеют событие OnGetDataCellText, которое точно также не удаляется.

Но нашел и другой компонент - TChart. У него тоже TChartAxis от TCollectionItem , имеют событие OnMarkToText.
НО! при сохранении или компиляции лазарус предлагает их удалить (см. скриншот)

Как добиться того же для моего компонента ?
wadman
Дата: 15.01.2020 12:53:00
Ghost Writer
Как добиться того же для моего компонента ?

Картинка с другого сайта.

Подозреваю, что у них свой проперти редактор, который может уведомлять среду об изменениях.
Ghost Writer
Дата: 15.01.2020 13:38:45
ну не знаю. в исходниках не вижу ничего подозрительного.

обратил внимание, что свойство сделано вот так:
    property OnMarkToText: TChartAxisMarkToTextEvent
      read FOnMarkToText write SetOnMarkToText; 

procedure TChartAxis.SetOnMarkToText(AValue: TChartAxisMarkToTextEvent);
begin
  if TMethod(FOnMarkToText) = TMethod(AValue) then exit;
  FOnMarkToText := AValue;
  StyleChanged(Self);
end;  


может тут вся собака зарыта ?

Если делаю также у себя, то получаю Error: Operator is not overloaded: "TMethod" = "TMethod"
wadman
Дата: 15.01.2020 14:09:53
Ghost Writer
может тут вся собака зарыта ?

Это ты в рантайм полез, а мы про дизайнтайм.

Смотри в исходниках чарта в папке editors. Там нечто подобное моим редакторам свойств. Уведомления, глобальные хуки дизайна и т.п.

В общем, не всё так просто. :)
Ghost Writer
Дата: 15.01.2020 14:19:04
wadman
Смотри в исходниках чарта в папке editors
там и смотрел
wadman
Дата: 15.01.2020 14:28:55
Ghost Writer
wadman
Смотри в исходниках чарта в папке editors
там и смотрел

У меня поиск по строке "TMethod(FOnMarkToText) = TMethod(AValue)" приводит к рантайму.
Редакторы в папке editors. У меня можешь посмотреть, чуть допотопнее и проще.