Показать сообщение отдельно
  #1  
Старый 19.12.2013, 11:54
Curen Curen вне форума
Прохожий
 
Регистрация: 19.12.2013
Сообщения: 9
Версия Delphi: Delphi XE2
Репутация: 10
Печаль Динамическое удаление объектов

Здравствуйте все, кто решил сюда заглянуть.
Хочу сразу сказать, что в Делфи я новичок, изучал его самостоятельно, по разным книжкам и в институтах да университетах программированию (имею ввиду программированию вообще) меня не учили. Здесь я тоже впервые. Пытался найти решение своей проблемы через поиск, но не нашел. Не только здесь, но и в интернете. Видимо, я первый с такой проблемой.

Собственно проблема вот в чем:

Пишу программу для работы с текстом из динамически создаваемой формы. Т.е. поля для заполнения создаются самой программой в процессе своей работы, потом по нажатию кнопки все введенный данные из всех объектов записываются в файл. Это вроде бы все работает.

Если пользователь хочет создать новую карточку, то он нажимает на кнопки и форма должна обновиться, т.е. появляются начальные объекты на форме. Новые уже добавляются потом. Объекты находятся на панели TPanel1. При нажатии кнопки, чтобы удалить все разом, я делают так:

TPanel.free;

А потом программа динамически опять создает эту же панель и выстраивает на ней форму. Сразу скажу - если тыкать по кнопке мышью - все работает! Но начальство хочет, чтобы сие работало также при нажатии горячих клавиш. И тут проблема. Собственно процедура:
Код:
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (ssCtrl in Shift) and (key = 78) then
  begin
    NewModul;
  end;
end;

NewModul - процедура, где находится собственно Panel1.free и другие операторы, создающие новую форму. Если форма изначальная, т.е. пользователь не успел добавить ни одного динамического объекта, то все работает. Если добавлен хоть один, то возникает ошибка:

Project nabor.exe raised exception class $C0000005 with message 'accees violation at 0x00455bab: read of address 0x00000000'

Блин, перепробовал уже наверное все, но в чем дело так и не понял. Самое интересное, что если в окне, описывающем ошибку, нажать кнопку "Continue", то программа сработает как надо. Пробовал запускать собственно exe'шник - тоже выдает окно с ошибкой, но тем не менее все срабатывает. В чем дело, может кто знает?
Ответить с цитированием