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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление всех компонентов на форме... иногда вылетает ошибочка. 
V
    Опции темы
lukas
Дата 29.4.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В общем удалить то с формы все компоненты не проблема, но появились некоторые нюансы:

Задача в том, чтобы при нажатии на кнопку удалялись все компоненты, кроме тех, у которых tag=13, (а также и нажимаемая кнопка). Проблема в том, что вот как раз-то таки эту нажимаемую кнопку удалить без глюков и ошибок не получается, т.к. (по видимому) она еще используется.


Вот код (который находится в процедуре кнопки OnClick):

Код

...
  li:=TObjectList.Create;
  for k:=0 to form1.ComponentCount-1 do begin
  if (form1.Components[k].Tag<>13) then begin
       li.Add(form1.Components[k]);
     end;
  end;
  
  li.free;
...


Вылетает (частенько) вот такая ошибка:

Цитата

---------------------------
menu
---------------------------
Access violation at address 00000000. Read of address 00000000.
---------------------------
ОК   
---------------------------


Причем адреса могут быть любыми, с label-ами все нормально, и например такая же ошибка и с checkbox'ами. А удалить нажимаемый компонент позарез необходимо сразу (без всяких таймеров). 




--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
ivan219
  Дата 29.4.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Может зделать через сообщения.
Хотя вот так работает без ошибок.
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Free;
end;

PM MAIL ICQ   Вверх
lukas
Дата 29.4.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ivan219, кнопка немного нестандартная... lbspeedbutton, вообщем имеет цвет при выделении при нажатии и т.п. Попробуй с чекбоксом... у меня вылетает ошибка... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
ivan219
  Дата 29.4.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ошибок нет.
Код

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 CheckBox1.Free;
end;

Хотя удалять компонент в его собственном обработчеки это дурной тон.
Воспользуйся лучше сообщениями.

Добавлено через 2 минуты и 33 секунды
Да а зачем их удалять может проще их скрыть???
Код

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 CheckBox1.Visible:=False;
end;

PM MAIL ICQ   Вверх
lukas
Дата 29.4.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ivan219, незнаю незнаю... но visible = false мне не подходит... будут загружаться новые компоненты на форму, и если вдруг будут одинаковые названия....  smile... Ладно буду разбираться сам... *насчет visible:=false я уже делал так, но если делать так, то мой код (по некоторым причинам) намного увеличится*...  smile  Код большой... поэтому разобраться под силу только мне...=)


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
mr.Anderson
Дата 29.4.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Цитата
Задача в том, чтобы при нажатии на кнопку удалялись все компоненты, кроме тех, у которых tag=13

Код

for i:=0 to Form1.ControlCount-1 do
 if( Form1.Controls[ i ].Tag <> 13 ) then
  Form1.Controls[ i ].Free;



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Snowy
Дата 30.4.2007, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



mr.Anderson, Не в ту сторону цикл крутишь.
Нужно
Код
for i := Form1.ControlCount-1 downto 0 do
 if( Form1.Controls[ i ].Tag <> 13 ) then
  Form1.Controls[ i ].Free;

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.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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