Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2010, 18:03   #1
JK0
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 26
По умолчанию удаление динамически создаваемого компонента delphi

На форме по нажатию кнопки динамически создаётся stringgrid (имя - а) заданной размерности. При повторном нажатии на кнопку создаётся новый stringgrid, но старый при этом не удаляется, т.е. на форме новый рисуется поверх старого. При попытке проверки наличия компонента, и в случае его существования, вызова деструктора - при выполнении приложения выбивает ошибку.
procedure TForm1.Button2Click(Sender: TObject);
var
a:TStringgrid;
....
begin
.....
if a<>nil then a.Destroy;
a:=Tstringgrid.Create(Form1);
a.Parent:=Form1;
a.ColCount:=na+1;
a.RowCount:=nk+1;
....
Причём, условие if a<>nil then... срабатывает уже при первом запуске программы, т.е. когда компонент ещё не создан!
Подскажите, пожалуйста, в чём дело?

Последний раз редактировалось JK0; 29.11.2010 в 18:38.
JK0 вне форума Ответить с цитированием
Старый 29.11.2010, 18:16   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Попробуй так
if a.Handle <> nil then a.Destroy;
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 29.11.2010, 18:23   #3
JK0
Пользователь
 
Регистрация: 01.09.2010
Сообщений: 26
По умолчанию

Работает с исходным кодом, если а описана как глобальная переменная. Правда, при компиляции всё время предлагает её из описания удалить
(2 дня мучений!)

Последний раз редактировалось JK0; 29.11.2010 в 18:49.
JK0 вне форума Ответить с цитированием
Старый 29.11.2010, 19:48   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
type
  Tform1 =class(Tform)
  ....
  private
    a: TstringGrid;
 //объявление должно быть здесь 
  end;

procedure TForm1.Button2Click(Sender: TObject);
var
a:TStringgrid;// а это надо убрать
....
begin
P.S.И назвать конечно же не a, а что-нибудь более читабельное, например dinamic_stringgrid
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 29.11.2010 в 19:53.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как динамически создать процедуры для подменю компонента TMainMenu Dimitriys Общие вопросы Delphi 9 13.01.2011 18:02
delphi, имя создаваемого файла Марат1989 Помощь студентам 7 22.10.2010 15:49
Как отловить Events динамически созданного компонента? W0LF Общие вопросы Delphi 2 06.11.2009 20:35
Поиск динамически созданного компонента GAGARIN-NEW Общие вопросы Delphi 2 30.01.2008 17:21
Поиск динамически созданного компонента GAGARIN-NEW Компоненты Delphi 2 16.12.2007 17:07