Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234

Как удалить TImage* зная только его Hint?

25.07.2014, 20:24. Показов 2476. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем Привет!
Появилась задачка.
есть динамически созданные объекты типа TImage у них есть только Хинты которые присваиваються по очереди генерации объекта.

Мне надо - зная текст хинта найти и удалить объект Timage.
Может это совсем просто?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.07.2014, 20:24
Ответы с готовыми решениями:

Удалить файл, зная только часть его имени
Здравствуйте. Допустим есть файл без расширения "KK123", но каждый раз при перезагрузке компьютера цифры меняются в рандомном порядке...

Как удалить таблицу зная только половину её названия?
Как удалить таблицу зная только половину её названия в mysql?

Как получить id элемента, зная только его класс?
Приветствую товарищи! Пожалуйста, помогите мне с решением одной задачи. У меня есть такой код: <button...

25
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
25.07.2014, 20:38
...перечислить объекты класса TImage, проверить свойство Hint.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
25.07.2014, 20:41  [ТС]
пробовал так
C++
1
(TImage*)FindComponent("Image")->а дальше что?
пробовал так

C++
1
2
3
4
5
    for(int i = 0;i < Form1->Karta_rajona->ComponentCount; i++)
    {
  if(Karta_rajona->Components[i]->???)// 
  { delete Karta_rajona->Components[i]; i--;  }
    }
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
25.07.2014, 20:50
Цитата Сообщение от lifeforce Посмотреть сообщение
(TImage*)FindComponent("Image")->а дальше что?
Дальше ничего. Ты создаёшь указатель на найденный объект.
C++
1
TImage * a =  (TImage*)FindComponent("Image");
Только тут поиск происходит по Имени компонента.

Попробуй как то так
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm2::Button1Click(TObject *Sender) {
    for (int i = 0; i < Form2->ComponentCount; i++) {
       TImage * a =  (TImage*)FindComponent(Form2->Components[i]->Name);
        if (a) {
            if (a->Hint == "То что тебе надо") {
                delete Form2->Components[i];
            }
        }
    }
}
0
Модератор
 Аватар для D1973
9911 / 6448 / 2455
Регистрация: 21.01.2014
Сообщений: 27,374
Записей в блоге: 3
25.07.2014, 20:51
Лучший ответ Сообщение было отмечено lifeforce как решение

Решение

Вот так если?
C++
1
2
3
4
5
6
7
for(int i = 0; i < this->ComponentCount; i++)
   {
     TComponent *Cmp = this->Components[i];
     if(Cmp->ClassNameIs("TImage"))
      if(((TImage*)Cmp)->Hint == "Бла-Бла-Бла")
       delete Cmp;
   }
1
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
25.07.2014, 20:55
...по большому счету так:
C++
1
2
3
4
for(int i = 0;i < ComponentCount; i++) {
    if (Components[i] is TImage) 
 {if ((Components[i] as TImage) -> Hint == "dcd") {};
}
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
25.07.2014, 20:56  [ТС]
D1973,
Огромоное спаибо! все работает!
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,895
Записей в блоге: 11
25.07.2014, 20:58
Лучший ответ Сообщение было отмечено lifeforce как решение

Решение

DeadHipo, бред не надо советовать. Просили найти только Image-и, а не любые компоненты с заданным Hint-ом, а приведение в стиле C не вернет NULL, если это не TImage*. Вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
    for (int i = 0; i < Form1->ComponentCount; i++)
    {
        TImage * a = dynamic_cast<TImage*>(Form1->Components[i]);
        if (a)
        {
            if (a->Hint == "То что тебе надо")
            {
                delete a;
            }
        }
    }
2
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
25.07.2014, 20:58  [ТС]
raxp,
сейчас попробую и вашу версию.
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
25.07.2014, 20:59
Цитата Сообщение от UI Посмотреть сообщение
а приведение в стиле C не вернет NULL
Спасибо
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
25.07.2014, 21:03  [ТС]
UI, Ваша версия не работает.
0
Модератор
 Аватар для D1973
9911 / 6448 / 2455
Регистрация: 21.01.2014
Сообщений: 27,374
Записей в блоге: 3
25.07.2014, 21:05
raxp, а разве в С++ есть такие вещи, как is и as?
Это как бы больше к Delphi относится...
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
25.07.2014, 21:13
...да не надо мою версию пробовать, это псевдокод.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
25.07.2014, 21:14  [ТС]
C++
1
2
3
4
5
6
  for(int i = 0; i < Form1->Karta_rajona->ComponentCount; i++)
   {
     TComponent *Cmp = Karta_rajona->Components[i];
      if(((TImage*)Cmp)->Hint == "Line_"+IntToStr(Form_range->StringGrid_node_range->Row)+" - "+(Form_range->ComboBox_node_range->Text))
       delete Cmp;
   }
Миниатюры
Как удалить TImage* зная только его Hint?   Как удалить TImage* зная только его Hint?  
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.07.2014, 21:31
Цитата Сообщение от lifeforce Посмотреть сообщение
UI, Ваша версия не работает.
Это просто ты не смог заставить ее работать. Версия хоть и не оптимальная по оптимизации, но на 100% рабочая. И является пока к тому же наиболее точной реализацией псевдокода от raxp.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
25.07.2014, 21:44  [ТС]
UI,
Код рабочий! пожалуй останусь на этом варианте!
здесь нет создания новых объектов и это гуд!
C++
1
2
3
4
5
6
7
8
9
10
11
    for (int i = 0; i < Karta_rajona->ComponentCount; i++)
    {
        TImage * a = dynamic_cast<TImage*>(Karta_rajona->Components[i]);
       // if (a)
      //  {
            if (a->Hint == "Line_"+IntToStr(Form_range->StringGrid_node_range->Row)+" - "+(Form_range->ComboBox_node_range->Text))
            {
                delete a;
            }
       // }
    }
просто ему надо было указать где рыть.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.07.2014, 21:51
Комменты лишние. Настанет счастливый момент - получишь access violation и не будешь знать откуда.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.07.2014, 22:20
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0; i < Form1->ComponentCount; i++)
    {
        TImage * a = dynamic_cast<TImage*>(Form1->Components[i]); // ->ClassNameIs("TImage")
        if (a)
        {
            if (a->Hint == "То что тебе надо")
            {
                delete a;
                break; // Зачем искать дальше ? А если уже искать то i--;
            }
        }
    }
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
25.07.2014, 22:22  [ТС]
Avazart,
как раз мне и надо искать дальше - потому что их может быть несколько с одинаковыми хинтами.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.07.2014, 22:24
Цитата Сообщение от lifeforce Посмотреть сообщение
Avazart,
как раз мне и надо искать дальше - потому что их может быть несколько с одинаковыми хинтами.
Ответ в комментариях, точнее поправка.
После удаления компонента Form1->ComponentCount изменится и компоненты сместятся, это надо учитывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.07.2014, 22:24
Помогаю со студенческими работами здесь

Как удалить элемент коллекции зная его значение?
Здравствуйте! Есть коллекция и известно значение одного из ее элементов, который надо в ней удалить. Как удалить этот элемент...

Как получить дочерний элемент DIV'а, зная только его id?
Есть . Внутри него с неизвестным уровнем вложенности находится текстовое поле с определенным id. Текстовые поля с таким же id есть и в...

Как получить позицию компонента, зная только его название
Люди как получить позицию компонента зная только его название? :umnik:

Как удалить последний элемент списка не зная его Listtaga?
Как удалить последний элемент списка не зная его listTaga?

Как удалить определённый EXE-файл, не зная его имени?
Как удалить определенный exe файл не зная имени файла. Пример, есть файл батник (test.bat) и test.exe (программа), и мне нужно удалить эту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru