Работа с Image компонентом
Я столкнулся с такой проблемой:
у меня в программе по надобности динамически создается нужное количество
компонентов 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 вообще не срабатывает!
Определил я это устанавливая брекпоинты.А мне нужно удалить полностью все
динамически созданные компоненты и заново их создать,потому что
заранее не известно количество файлов,которое прийдется загрузить.
Подскажите пожалуйста, в чем причина и как это исправить, чтоб все заработало как надо?!!!!
2. имхо, в данной задече, для хранения кучи указателей на объект проще использовать std::vector
А можно какой то маленький исходничек по std::vector!?:)
зы:
for(;;)
{
........
ImageArray.push_back(new TIamge(Owner));
........
}
зы:
for(;;)
{
........
ImageArray.push_back(new TIamge(Owner));
........
}
Так вызывается моя функция:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DeletsImages();
}
ЗЫ: в том месте, откуда взял этот код есть еще и рабочий исходник, скачай, посмотри.
Все нормально!Я понял сразу,как увидел,что про TImage там ничего нет!:)
ЗЫ: в том месте, откуда взял этот код есть еще и рабочий исходник, скачай, посмотри.
Пробовал писать просто в обработчике нажатия кнопки,результат тот же.Присутствует какая то неопределимая неопределенность с этим куском кода:
//----------------------------------------------------------------------
for (unsigned int j = 0; j<ImMap.size(); j++)
delete ImMap[j];
ImMap.clear();
delete i->second;
ImMap.clear()
delete i->second;
ImMap.clear()
Попробовал и этот код,все равно не удаляются Image!Изображения на форме после удаления не пропадают.Пробовал перерисовку окна после удаления,изображения на форме все равно присутствуют!:confused:
В смысле?:confused:
Обработчики событий у меня корректно расписаны!Ток вот код отвечающий за удаление компонентов TImage не удаляет физически созданные компоненты!