Столкнулся с такой вот проблемой, при динамическом создании компонент:
объявляю глобальную переменную rect:array of TRectangle;
устанавливаю setLength(rect,0);
где вызываю компоненты пишу
if form1.FindComponent('DN1')<>nil then showmessage('Не удалили');
for i := 0 to 6 do begin
setLength(rect, i+1);
rect[i]:=TRectangle.Create(form1);
rect[i].Parent:=form1.rt0;
...
rect[i].Name:='DN'+inttostr(i+1);
rect[i].OnClick:=form1.RectangleClick;
end;
в процедуре удаления компонент пишу:
for i:=0 to Length(rect)-1 do begin
rect[i].Free;
rect[i]:=nil;
freeandnil(rect[i]);
end;
setLength(rect,0);
так вот, после первого вызова все нормально выводится сообщение 'Не удалили' не появляется, onclick срабатывает. При попытке удалить компоненты выходит сообщение 'Не удалили' и при втором вызове создания компонентов на телефоне выходит сообщение "A component named DN1 already exists".
Хотя в windows удаляются компоненты правильно и ошибки не выходят.
Вопрос
Владимир Невзоров
Столкнулся с такой вот проблемой, при динамическом создании компонент:
объявляю глобальную переменную rect:array of TRectangle;
устанавливаю setLength(rect,0);
где вызываю компоненты пишу
if form1.FindComponent('DN1')<>nil then showmessage('Не удалили'); for i := 0 to 6 do begin setLength(rect, i+1); rect[i]:=TRectangle.Create(form1); rect[i].Parent:=form1.rt0; ... rect[i].Name:='DN'+inttostr(i+1); rect[i].OnClick:=form1.RectangleClick; end;
в процедуре удаления компонент пишу:
for i:=0 to Length(rect)-1 do begin rect[i].Free; rect[i]:=nil; freeandnil(rect[i]); end; setLength(rect,0);
так вот, после первого вызова все нормально выводится сообщение 'Не удалили' не появляется, onclick срабатывает. При попытке удалить компоненты выходит сообщение 'Не удалили' и при втором вызове создания компонентов на телефоне выходит сообщение "A component named DN1 already exists".
Хотя в windows удаляются компоненты правильно и ошибки не выходят.
Может это баг такой, но уже ни знаю что и делать.
Ссылка на комментарий
3 ответа на этот вопрос
Рекомендуемые сообщения