C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Работа с компонентами в run-time
palich
Отправлено: 11.11.2005, 08:06


Не зарегистрирован







Доброго времени суток господа.

Постановка задачи:

Есть(то есть пока ещё нет) обычное приложение, на форме присутствует
только контекстное меню в котором дапустим один пункт "Создать".
При выборе из меню этого пункта создаётся какойнибуть компонент например Button
которому присваиваются разлисные свойства, а так же устанавливаются обработчики
событий (OnMouseDown,OnMouseMove,OnMouseUp) которые позволяют перемещать Button
по форме во время выполнения.

Суть проблемы:

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

Не сочтите за труд подскажите.
AVC
Отправлено: 11.11.2005, 09:06


Ветеран

Группа: Модератор
Сообщений: 1583



Любая реализация динамических массивов указателей / структур / ...
Варианты решения vector / TList / ...

Если отдавать это пользователю, то я оформил бы это в класс, который кроме всего прочего умеет сохранять информацию между запусками приложения.
palich
Отправлено: 11.11.2005, 10:47


Не зарегистрирован







OK

Всё получилось, только вот понять не могу.

CODE


void __fastcall TForm1::N1Click(TObject *Sender)
{
 TButton* btn = new TButton(this);
 btn->Caption = "я кнопка";
 btn->Parent = this;
 btn->OnMouseDown = &MouseDown;
 btn->OnMouseUp = &MouseUp;
 btn->OnMouseMove = &MouseMove;
 array_buttons.push_back(btn);
}



Кнопки функцианируют, всё как надо, но просто интересно
если в эту функцию оброботчик вставить delete(btn) (знаю,знаю переменная btn автоматически уничтожается при выходе из обработчика)smile.gif

CODE


void __fastcall TForm1::N1Click(TObject *Sender)
{
 TButton* btn = new TButton(this);
 btn->Caption = "я кнопка";
 btn->Parent = this;
 btn->OnMouseDown = &MouseDown;
 btn->OnMouseUp = &MouseUp;
 btn->OnMouseMove = &MouseMove;

 ...
 ...
 ...

 array_buttons.push_back(btn);
 delete(btn);                    <-----------------------------------------

}



То прога запускается но все создающиеся кнопки не отображаются на форме,нету их.
Asher
Отправлено: 11.11.2005, 11:21


Мастер участка

Группа: Модератор
Сообщений: 550



Привет.
QUOTE
знаю,знаю переменная btn автоматически уничтожается при выходе из обработчика

Переменная то уничтожается, а то что Вы по new TButton(this); наплодили нет.
А delete(btn); Вы их удаляете. Так, что то что их нет — все правильно.

Вернуться в Вопросы программирования в C++Builder