Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему EAccessViolation, ??? 
:(
    Опции темы
Zzz
Дата 17.3.2005, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Создаю панель:
Код

   static int a;
   TPanel *Panel = new TPanel(Frame21);
   Panel->Width = Frame21->Width-4;
   Panel->Left = 2;
   Panel->Height = 50;
   Panel->Top = a*50;
   Panel->Name = "Panel" + IntToStr(a);
   Panel->Parent = Frame21;
   Panel->OnClick = PanelClick;
   a++;


Описываю PanelClick:
Код

void __fastcall TForm1::PanelClick(TObject *Sender)
{
  TComponent *CP;
  CP = Frame21->FindComponent(((TComponent *) Sender)->Name);
  delete CP;
  Frame21->Repaint();
}


А он мне AccessViolation, почему? Хотя если продолжить выполнение панельку он удаляет...

Как правильно это сделать?

P.S. Код написан специально для выяснения проблемы smile


--------------------
Бесполезной громоздкой надстройкой является Windows от Майкрософт. Она занимает 1Мб памяти диска и рассчитана на использование устройства типа мышь.

"ЭВМ в инженерной практике" М. 1989г.
PM MAIL ICQ   Вверх
Borisff2003
Дата 18.3.2005, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

Frame21->RemoveComponent(CP);

--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
Zzz
Дата 18.3.2005, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Borisff2003 @ 17.3.2005, 22:29)
Код

Frame21->RemoveComponent(CP);

Спасибо - помогло. Только после выполнения, количество компонент (Frame21->ComponentsCount) уменьшается, но все равно все отображаются. Не помогает ни Update() ни Repaint(). То есть получается что компоненты нет, но она видна. Как это разрулить? smile


--------------------
Бесполезной громоздкой надстройкой является Windows от Майкрософт. Она занимает 1Мб памяти диска и рассчитана на использование устройства типа мышь.

"ЭВМ в инженерной практике" М. 1989г.
PM MAIL ICQ   Вверх
Adil'
Дата 19.3.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Zzz @ 18.3.2005, 16:08)
Спасибо - помогло
- это просто удаленеи CP из списка "дочерних" компонентов Frame21 - сам объект компонента не удаляется; равносильно CP->Owner=NULL;

Так что это не помогло smile

Цитата(Zzz @ 17.3.2005, 18:30)
он мне AccessViolation, почему? Хотя если продолжить выполнение панельку он удаляет...
Потому что, грубо говоря, ты пытаешься удалить окно в его же собственной процедуре обработки сообщений.
Если уж очень хочется удалить панель при клике именно на эту панель, то запусти таймер с минимальным интервалом и удали панель при обработке сообщания от этого таймера.
Или посылай своему окну сообщений типа
#define WM_DELETECOMPONENT WM_USER+100
с указателем на удаляемый компонент и при удаляй его при обработке этого сообщения. Только посылать надо PostMessage'м.



--------------------
Удачи
PM MAIL WWW   Вверх
Zzz
Дата 21.3.2005, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

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

Что-то подобное я и предполагал...

Цитата

если уж очень хочется удалить панель при клике именно на эту панель, то запусти таймер с минимальным интервалом и удали панель при обработке сообщания от этого таймера.

Помогло smile Спасибо.


--------------------
Бесполезной громоздкой надстройкой является Windows от Майкрософт. Она занимает 1Мб памяти диска и рассчитана на использование устройства типа мышь.

"ЭВМ в инженерной практике" М. 1989г.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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