эвакуато.
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как перебрать ВСЕ TControl-ы на форме?, и Parent-ы и Children-ы
Wasabi
Отправлено: 19.08.2004, 09:31


Ученик-кочегар

Группа: Участник
Сообщений: 23



Мне надо при загрузке формы перебрать все компоненты и некоторым поменять свойства.

Написал функцию которая перебирает TComponent -ы , но оказалось не устроило время ее исполнения.

Не могу понять как надо бегать по TControl-ам, видно только один "слой" лежищий на форме. А например до батона лежащего на панели, добраться не получается. Мож кто подкинет пример кода? smile.gif
Спасиб
olegenty
Отправлено: 19.08.2004, 10:30


Ветеран

Группа: Модератор
Сообщений: 2412



вот так:

User Attached Image Скачать файл
Temp.zip


Wasabi
Отправлено: 19.08.2004, 10:36


Ученик-кочегар

Группа: Участник
Сообщений: 23



QUOTE (olegenty @ 19/08/2004, 11:32)
вот так:

Не смог открыть файл, пишет что поврежденный архив или многотомный.

Но зато смог вроде сам разобраться, вот так:

CODE

class TTempControl : public TWinControl
{
};


void __fastcall TForm1::Button2Click(TObject *Sender)
{
TControl *ChildControl;
TClass ClassRef;

for (int I = this->ControlCount-1; I >= 0; I--)
    {
     ChildControl=this->Controls[I];
...
...
     TTempControl *ctrl = (TTempControl*) ChildControl;
         if(ctrl->ControlCount>0)
           {
            ShowMessage(ChildControl->Name);
            TTempControl *ctrlTemp = (TTempControl*) ChildControl;
            Form1->SearchControl(ctrlTemp);
           }


    }

}
//---------------------------------------------------------------------------
void __fastcall TForm1::SearchControl(TWinControl *ctrl)
{
TWinControl *ChildControl;
for (int I = ctrl->ControlCount-1; I >= 0; I--)
    {
     TTempControl *ctrlTemp = (TTempControl*) ctrl->Controls[I];
     ChildControl=ctrlTemp;
     if(ChildControl->ControlCount>0)
       ShowMessage("Child "+ChildControl->Name);
       Form1->SearchControl(ChildControl);
    }
}


вроде работает.
olegenty
Отправлено: 19.08.2004, 10:54


Ветеран

Группа: Модератор
Сообщений: 2412



только всё как-то грустно: много лишнего кода...
вот что было в примере:
CODE

void __fastcall TForm1::ListControls(TWinControl *p)
{
   if (!p) return;
   for (int i = 0; i < p->ControlCount; i++)
   {
       me->Lines->Add(AnsiString(p->Controls[i]->ClassName()) + " — " + p->Controls[i]->Name);
       ListControls(dynamic_cast<TWinControl*>(p->Controls[i]));
   }
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ListControls(this);
}


и не париться smile.gif

Вернуться в Вопросы программирования в C++Builder