Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.06.2009, 11:01
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию Удалить динамически созданную кнопку

Создаю кнопку:
Код:
Butt:=TBitBtn.Create(nil);
Butt.Parent:= clkForm;
Butt.Width:=171;
Butt.Height:=25;
Butt.OnClick:=onBitClick;
Ну и в onBitClick хочу ее удалить:
Код:
procedure TclkForm.OnBitClick(Sender: TObject);
begin
 if Sender is TBitBtn then
  with (Sender as TBitBtn) do
   begin
   Free;
   end;
end;
Кнопку процедура удаляет, но иногда получаю AccessViolation, т.е. при первом удалении AccessViolation 100%, а потом- то проходит без проблем, то опять AccessViolation. А и еще нейкий Abstract Error после Violation иногда выдает. Где туплю?
Ответить с цитированием
  #2  
Старый 30.06.2009, 11:28
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Тут, вроде, разобрался - походу проблема в том, что у созданной кнопки есть обработчик onClick. Это так?

И вот еще:
создаю:
Код:
CheckList:=TCheckListBox.Create(nil);
CheckList.Parent:= clkForm;
и тож не могу его удалить:
Код:
clkForm.FindComponent('CheckList').Free;
Тут то уже что не так?
Ответить с цитированием
  #3  
Старый 30.06.2009, 11:42
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

А это после вызова конструктора сделали?
Код:
CheckList.Name:= 'CheckList';
Ответить с цитированием
  #4  
Старый 30.06.2009, 12:34
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Нет, не сделал. Спасибо за решение. Возник вопрос по ходу. Проблему я решил по другому. CheckList объявил в Private и вызываю CheckList.Destroy - все работает. Как будет более верно? Всмысле считается ли мой способ решения как бы корректным или все- же лучше так не делать?
Ответить с цитированием
  #5  
Старый 30.06.2009, 13:24
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Цитата:
Do not call Destroy directly in an application. Call Free instead. Free verifies that the check list box is not nil before it calls Destroy.

Из Delphi Help. =)
Ответить с цитированием
  #6  
Старый 30.06.2009, 13:39
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Цитата:
Сообщение от Nyctos Kasignete
А это после вызова конструктора сделали?
Код:
CheckList.Name:= 'CheckList';

Ну что ж вернулся к вашему решению. Не пашет.
Так создаю
Код:
CheckList:=TCheckListBox.Create(nil);
CheckList.Parent:= clkForm;
CheckList.Width:=393;
CheckList.Height:=217;
CheckList.Top:=0;
CheckList.Left:=552;
CheckList.Font.Size:=12;
CheckList.Name:='CheckList';
Так удаляю
Код:
clkForm.FindComponent('CheckList').Free;
и ничего не происходит...
Ответить с цитированием
  #7  
Старый 30.06.2009, 13:48
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Надобно так вот создавать:
Код:
CheckList:=TCheckListBox.Create(clkForm);
Ответить с цитированием
  #8  
Старый 30.06.2009, 13:59
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Ну все, вроде работает. СПС.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter