Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание объекта  (Прочитано 7245 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Iwoyd
Гость
« : 03-02-2009 07:21 » 

Сразу прошу меня извинить, если подобные вопросы возникали уже на форуме. Но я просто не знаю, как корректно описать данный вопрос.
Требуется, чтобы при нажатии на кнопку создавался объект (например, TLabel). Причем, количество объектов неизвестно заранее, т.к., допустим, они создаются по каждому щелчку мыши в определенной зоне диалогового окна. Как это сделать?
Хотелось бы, конечно, разъяснения по этому вопросу в C++ Builder с TLable. Но можно и в MS Visual C++ со StaticText.
Заранее спасибо)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Online Online
Сообщений: 13


« Ответ #1 : 03-02-2009 07:38 » 

Iwoyd, способ зависит от задачи, можно это делать статически, можно динамически. Независимо от среды разработки:

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

2) динамический способ:
 иметь в программе массив указателей на объект
Код:
//VC++

 //если, скажем, больше 100 элементов не предвидится. (Если предвидится -
 //это задача уже относится к работе с динамическим массивом.
 //Можно vector использовать, например, или ещё что нибудь)
 enum{e_elemsMaxCount=100};

 CStatic* m_Array[e_elemsMaxCount];
 ...
 //инициализация массива - все указатели == 0
 //0 покажет, что объект не создан
 ::memset(m_Array,0,sizeof(m_Array));

 ...

 //где то понадобился новый объект
  //ищем в массиве m_Array не занятый указатель

 CStatic** ppS= ...;//например, ppS=&m_Array[13];


 if(ppS!=0 && (*ppS) == 0)
 {
  (*ppS)=new CStatic();
  (*ppS)->Create(...);
  (*ppS)->MoveWindow(...);
}


//в деструкторе чистим память
for(int i=0; i<e_elemsMaxCount; i++)
{
 if(m_Array[i])
 {
   m_Array[i].DestroyWindow();
   delete m_Array[i];
   m_Array[i]=0;
 }
}

вот как-то так Улыбаюсь
« Последнее редактирование: 03-02-2009 09:36 от Алексей1153++ » Записан

Iwoyd
Гость
« Ответ #2 : 03-02-2009 08:47 » 

Можно я задам более общий вопрос? Т.к. мне подсказывают, что мое решение неумное.
Задача такова:
При каждом щелчке мыши появлялась точка (или окружность), а рядом с ней порядковый номер (ну... 1, 2, 3 и т.д.).
Какими способами и как это можно реализовать?

Алексей1153++, огромное спасибо. Для меня было много вкусного)
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 03-02-2009 08:55 » 

Iwoyd, смотря чего тебе нужно от точки. Она должна являться контролом, или это просто изображение (пусть даже с координатами, которые где-то хранятся и для чего-то потом используются)? Если второе - предусматривается ли "отмена" - удаление точки (с сохранением всех остальных)?
Записан
Iwoyd
Гость
« Ответ #4 : 03-02-2009 09:07 » 

Вад, простите за неграмотность, что значит: "являться контролом"?
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 03-02-2009 09:11 » 

Iwoyd, в смысле, "точка с номером" реализует какое-то интерактивное поведение? То есть, будет ли она в дальнейшем как-то реагировать на действия пользователя: клик, попытку перетащить, вызвать контекстное меню, и т.п.? Или же просто: кликнули-отобразили-если нужно, запомнили где-то координаты?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Online Online
Сообщений: 13


« Ответ #6 : 03-02-2009 09:39 » new

Iwoyd, то есть это вроде визуального графического редактора , тогда если объектов будет много, лучше контролами (то есть элементами управления) не пользоваться, лучше создавать свои программные объекты, описать структуры. А на форме просто отрисовывать  текущее положение дел - работать будет быстрее и красивее )
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines