Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как реализовать самоуничтожение компонента? Очистка формы от компонент 
V
    Опции темы
Zavlab
Дата 28.12.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.2.2006

Репутация: 1
Всего: 1



Здравствуйте.

  Приплыл в своём программировании в тупик. Получается, что компонент формы должен сам себя уничтожить. На первый раз проносит(имею ввиду цикл разрушения-создания), а дальше ошибки появляются. Самые информативные такие: "Abstract error" и "Invalid pointer operation". А дальше прогу вообще выключить нельзя нормальными способами. 
  Что ещё я обнаружил так это то, что после срабатывания метода free указатель на компоненту (Element:TControl;) равен не nil (как до создания пользуясь Create), а некоему ([csInheritable]). Это значение показывает Watch. В самом методе (Sender-ом, к примеру, является кнопка) всё происходит без Исключений, но как только дело доходит за последний end этого метода, тут же и сообщение об ошибке. Если этот же метод будет исполняться с Sender-ом в виде Form1 или другого компонента, который не подлежит удалению, то метод отрабатывается хорошо и после него тоже всё хорошо. Получается нужен кто-то ктобы потом позже произвёл удаление ненужного компонента. Думал реализовать это через сообщения, но методы Perform или WndProc работают как подпроцедуры, что совсем не подходит.
  Есть ли какие-либо другие способы устранить проблему. Вариант через timer оставлю как самый последний.


Для наглядности приведу суть метода:

Код

var Element:array of TControl;

procedure TForm1.FormReInitialization(Sender: TObject);
var i,fin:byte;
begin
    fin:=Length(Element);
    if fin>0 then
     for i:=fin-1 downto 0 do
       Element[i].free;
    SetLength (Element,0);
    form1.FormInitialization(Sender);
end;


Можно и без метода FormInitialization. Грабли те же.
PM MAIL   Вверх
DarkProg
Дата 28.12.2009, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Кажется это уже обсуждалось ранее, ну да ладно

Я тут что вижу ты связываешь массив компонентов с реальными компонентами, а что если попробовать так
Код

  FindComponent(Element[i].Name).free


А ещё предлагали вариант, я правда сам не пробовал
  
Код

  FreeAndNil(Element[i])

или так
Код

 Element[i].free;
 element[i]:=nil;



--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
kami
Дата 28.12.2009, 21:58 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Чуть пропиарю себя, любимого smile
самоуничтожение визуального компонента
PM MAIL WWW   Вверх
DarkProg
Дата 28.12.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Цитата(kami @  28.12.2009,  21:58 Найти цитируемый пост)
Чуть пропиарю себя, любимого 
самоуничтожение визуального компонента 


О класс и, по моему доступно изложено

Да и я в этом вопросе чуток поумнее стал smile


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Zavlab
Дата 28.12.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.2.2006

Репутация: 1
Всего: 1



Спасибо! "То что доктор приписал".
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.