Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
lifeforce
230 / 183 / 81
Регистрация: 27.09.2010
Сообщений: 1,093
1

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

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

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

Мне надо - зная текст хинта найти и удалить объект Timage.
Может это совсем просто?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2014, 20:24
Ответы с готовыми решениями:

Hint для объектов на TImage
Есть объекты прорисованные на Image, как сделать им всплывающую подсказку? Пробовал использовать...

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

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

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

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

25
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
25.07.2014, 20:38 2
...перечислить объекты класса TImage, проверить свойство Hint.
0
lifeforce
230 / 183 / 81
Регистрация: 27.09.2010
Сообщений: 1,093
25.07.2014, 20:41  [ТС] 3
пробовал так
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 4
Цитата Сообщение от 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
Модератор
4004 / 2877 / 1393
Регистрация: 21.01.2014
Сообщений: 12,226
Записей в блоге: 3
Завершенные тесты: 1
25.07.2014, 20:51 5
Лучший ответ Сообщение было отмечено 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
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
25.07.2014, 20:55 6
...по большому счету так:
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
230 / 183 / 81
Регистрация: 27.09.2010
Сообщений: 1,093
25.07.2014, 20:56  [ТС] 7
D1973,
Огромоное спаибо! все работает!
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27053 / 18091 / 7153
Регистрация: 22.10.2011
Сообщений: 31,854
Записей в блоге: 6
25.07.2014, 20:58 8
Лучший ответ Сообщение было отмечено 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
230 / 183 / 81
Регистрация: 27.09.2010
Сообщений: 1,093
25.07.2014, 20:58  [ТС] 9
raxp,
сейчас попробую и вашу версию.
0
DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
25.07.2014, 20:59 10
Цитата Сообщение от UI Посмотреть сообщение
а приведение в стиле C не вернет NULL
Спасибо
0
lifeforce
230 / 183 / 81
Регистрация: 27.09.2010
Сообщений: 1,093
25.07.2014, 21:03  [ТС] 11
UI, Ваша версия не работает.
0
D1973
Модератор
4004 / 2877 / 1393
Регистрация: 21.01.2014
Сообщений: 12,226
Записей в блоге: 3
Завершенные тесты: 1
25.07.2014, 21:05 12
raxp, а разве в С++ есть такие вещи, как is и as?
Это как бы больше к Delphi относится...
0
raxp
10190 / 6573 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
25.07.2014, 21:13 13
...да не надо мою версию пробовать, это псевдокод.
0
lifeforce
230 / 183 / 81
Регистрация: 27.09.2010
Сообщений: 1,093
25.07.2014, 21:14  [ТС] 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;
   }
0
Миниатюры
Как удалить TImage* зная только его Hint?   Как удалить TImage* зная только его Hint?  
BRcr
4023 / 2312 / 292
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
25.07.2014, 21:31 15
Цитата Сообщение от lifeforce Посмотреть сообщение
UI, Ваша версия не работает.
Это просто ты не смог заставить ее работать. Версия хоть и не оптимальная по оптимизации, но на 100% рабочая. И является пока к тому же наиболее точной реализацией псевдокода от raxp.
0
lifeforce
230 / 183 / 81
Регистрация: 27.09.2010
Сообщений: 1,093
25.07.2014, 21:44  [ТС] 16
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
4023 / 2312 / 292
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
25.07.2014, 21:51 17
Комменты лишние. Настанет счастливый момент - получишь access violation и не будешь знать откуда.
0
Avazart
Эксперт С++
7805 / 5704 / 561
Регистрация: 10.12.2010
Сообщений: 26,017
Записей в блоге: 17
25.07.2014, 22:20 18
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
230 / 183 / 81
Регистрация: 27.09.2010
Сообщений: 1,093
25.07.2014, 22:22  [ТС] 19
Avazart,
как раз мне и надо искать дальше - потому что их может быть несколько с одинаковыми хинтами.
0
Avazart
Эксперт С++
7805 / 5704 / 561
Регистрация: 10.12.2010
Сообщений: 26,017
Записей в блоге: 17
25.07.2014, 22:24 20
Цитата Сообщение от lifeforce Посмотреть сообщение
Avazart,
как раз мне и надо искать дальше - потому что их может быть несколько с одинаковыми хинтами.
Ответ в комментариях, точнее поправка.
После удаления компонента Form1->ComponentCount изменится и компоненты сместятся, это надо учитывать.
0
25.07.2014, 22:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2014, 22:24

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru