Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с Image компонентом

32K
24 августа 2009 года
Агроном
28 / / 14.11.2008
Здравствуйте!
Я столкнулся с такой проблемой:
у меня в программе по надобности динамически создается нужное количество
компонентов TImage.
создаю я их так:
// заголовочный файл:
#include <map>

using namespace std;

class TForm1 : public TForm
{
...
...
private: // User declarations
map <int, TImage*> ImMap; // индексированный контейнер для хранения указателей
}

//в cpp
TImage *img;
//---------------------------------------------------------------------------
void __fastcall TForm1::ShowImages(void)
{
for (int i = 0; i < ListBox1->Items->Count; i++) // создаем 10 одинаковых объектов типа TImage
{
img = new TImage (this);
img->Parent = this;
img->Width = 100;
img->Height = 100;
img->Top = 100*i+10;
img->Picture->Bitmap->LoadFromFile(ListBox1->Items->Strings);
img->Visible = true;
}
}
//---------------------------------------------------------------------------
потом пользователь выбрал другой список.... я удаляю все динамически созданные
компоненты TImage:
// удаление динамических компонентов
void __fastcall TForm1::DeletsImages(void)
{
for (unsigned int j = 0; j<ImMap.size(); j++)
delete ImMap[j];
ImMap.clear();
ShowImages();//Вызываю функцию динамического создания TImage
}

Вот тут и кроется непонятная мне ошибка!Функция DeletsImages вообще не срабатывает!
Определил я это устанавливая брекпоинты.А мне нужно удалить полностью все
динамически созданные компоненты и заново их создать,потому что
заранее не известно количество файлов,которое прийдется загрузить.
Подскажите пожалуйста, в чем причина и как это исправить, чтоб все заработало как надо?!!!!
11
24 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
1. Она (DeletsImages ) где нибудь вызывается?
2. имхо, в данной задече, для хранения кучи указателей на объект проще использовать std::vector
32K
25 августа 2009 года
Агроном
28 / / 14.11.2008
Да,вызывается при нажатии кнопки.
А можно какой то маленький исходничек по std::vector!?:)
11
25 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
приведи кусок кода, из которого будет понятно как и где вызываются неработающие функции.
зы:
 
Код:
std::vector<TImage*>ImageArray;
for(;;)
{
   ........
   ImageArray.push_back(new TIamge(Owner));
   ........
}
92
25 августа 2009 года
Тень Пса
2.2K / / 19.10.2006
Цитата: Агроном
Да,вызывается при нажатии кнопки.
А можно какой то маленький исходничек по std::vector!?:)


млин... бегом сюда! и вопросы свои оставь до того момента как прочтёшь там всё ))))))

32K
25 августа 2009 года
Агроном
28 / / 14.11.2008
Цитата: oxotnik333
приведи кусок кода, из которого будет понятно как и где вызываются неработающие функции.
зы:
 
Код:
std::vector<TImage*>ImageArray;
for(;;)
{
   ........
   ImageArray.push_back(new TIamge(Owner));
   ........
}



Так вызывается моя функция:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DeletsImages();
}

32K
25 августа 2009 года
Агроном
28 / / 14.11.2008
Цитата: Тень Пса
млин... бегом сюда! и вопросы свои оставь до того момента как прочтёшь там всё ))))))



Спасибо!Буду переводить и разбираться!

92
25 августа 2009 года
Тень Пса
2.2K / / 19.10.2006
это по только вектору, про который тебе сказали :) и только для того, чтобы кусков кода не просил. про TImage там нет ничего )
11
25 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
напиши удаление не в отдельной ф-ции а в обработчике нажатия кнопки , и посмотри будет ли удалять.
ЗЫ: в том месте, откуда взял этот код есть еще и рабочий исходник, скачай, посмотри.
32K
26 августа 2009 года
Агроном
28 / / 14.11.2008
Цитата: Тень Пса
это по только вектору, про который тебе сказали :) и только для того, чтобы кусков кода не просил. про TImage там нет ничего )



Все нормально!Я понял сразу,как увидел,что про TImage там ничего нет!:)

32K
26 августа 2009 года
Агроном
28 / / 14.11.2008
Цитата: oxotnik333
напиши удаление не в отдельной ф-ции а в обработчике нажатия кнопки , и посмотри будет ли удалять.
ЗЫ: в том месте, откуда взял этот код есть еще и рабочий исходник, скачай, посмотри.



Пробовал писать просто в обработчике нажатия кнопки,результат тот же.Присутствует какая то неопределимая неопределенность с этим куском кода:
//----------------------------------------------------------------------
for (unsigned int j = 0; j<ImMap.size(); j++)
delete ImMap[j];
ImMap.clear();

11
26 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
 
Код:
for (map<int, TImage*>::iterator i = ImMap.begin(); i !=ImMap.end(); i++)
    delete i->second;
ImMap.clear()
32K
27 августа 2009 года
Агроном
28 / / 14.11.2008
Цитата: oxotnik333
 
Код:
for (map<int, TImage*>::iterator i = ImMap.begin(); i !=ImMap.end(); i++)
    delete i->second;
ImMap.clear()



Попробовал и этот код,все равно не удаляются Image!Изображения на форме после удаления не пропадают.Пробовал перерисовку окна после удаления,изображения на форме все равно присутствуют!:confused:

11
27 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
видать в дизайнере отцепил кнопку от обработчика OnClick
32K
31 августа 2009 года
Агроном
28 / / 14.11.2008
Цитата: oxotnik333
видать в дизайнере отцепил кнопку от обработчика OnClick



В смысле?:confused:

92
31 августа 2009 года
Тень Пса
2.2K / / 19.10.2006
в прямом =) когда жмакаешь два раза по нужной кнопке (на стадии дизайна), редактор переходит на тот код, который должен исполняться? )
32K
31 августа 2009 года
Агроном
28 / / 14.11.2008
Цитата: Тень Пса
в прямом =) когда жмакаешь два раза по нужной кнопке (на стадии дизайна), редактор переходит на тот код, который должен исполняться? )



Обработчики событий у меня корректно расписаны!Ток вот код отвечающий за удаление компонентов TImage не удаляет физически созданные компоненты!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог