В VCL нет функции, которая могла бы сделать это за вас. Вам нужно будет вручную l oop через свойство Components[]
владельца TForm
или свойство Controls[]
Parent
элементов управления TImage
, проверяя каждый компонент / элемент управления на TImage
перед доступ к их Tag
, например:
TImage* TMyForm::FindImageByTag(NativeInt ATag)
{
for(int i = 0; i < ComponentCount /* or: SomeParent->ControlCount */; ++i)
{
if (TImage *img = dynamic_cast<TImage*>(Components[i] /* or: SomeParent->Controls[i] */))
{
if (img->Tag == ATag)
return img;
}
}
return NULL;
}
TImage *img = FindImageByTag(...);
if (img)
img->Tag = img->Tag + 1;
В качестве альтернативы вы должны хранить указатели на свои TImage
элементы управления в своем собственном массиве, который затем можно индексировать в / l oop через, когда необходимо, например:
private:
TImage* Images[64];
...
__fastcall TMyForm::TMyForm(TComponent *Owner)
: TForm(Owner)
{
Images[0] = Image1;
Images[1] = Image2;
Images[2] = Image3;
...
Images[63] = Image64;
}
TImage* TMyForm::FindImageByTag(NativeInt ATag)
{
for(int i = 0; i < 64; ++i)
{
if (Images[i]->Tag == ATag)
return Images[i];
}
return NULL;
}
При заполнении массива, если вы не хотите жестко кодировать 64 указателя по отдельности, вы можете вместо этого использовать al oop:
__fastcall TMyForm::TMyForm(TComponent *Owner)
: TForm(Owner)
{
int idx = 0;
for(int i = 0; (i < ComponentCount /* or: SomeParent->ControlCount */) && (idx < 64); ++i)
{
TImage *img = dynamic_cast<TImage*>(Components[i] /* or: SomeParent->Controls[i] */)
if (img)
Images[idx++] = img;
}
}
В качестве альтернативы, используя метод формы FindComponent()
:
__fastcall TMyForm::TMyForm(TComponent *Owner)
: TForm(Owner)
{
int idx = 0;
for(int i = 1; i <= 64; ++i)
{
TImage *img = dynamic_cast<TImage*>(FindComponent(_D("Image")+String(i)));
if (img)
Images[idx++] = img;
}
}