Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.07;
Скачать: CL | DM;

Вниз

цикл по компонентам   Найти похожие ветки 

 
ArtemB ©   (2003-03-27 08:07) [0]

Меня давно мучает вопрос: как в цикле удобней всего пробежаться по компонентам (например меткам) ?

Я знаю 2 решения:
1)Создать массив (TLabel) обозн.ибегать
2)Через Tag компонента (дать одинак. Tag)и бегать потом по тем, у кот.Tag одинаковый.

А КАК ЕЩЕ??? Должно быть проще (for i:=0 to ....)


 
Opuhshii ©   (2003-03-27 08:20) [1]

2ArtemB © (27.03.03 08:07)
"Должно быть проще" точно,..

procedure TForm1.Button1Click(Sender: TObject);
var
I:Integer;
begin
for I:=0 to Pred(ComponentCount) do begin
if Components[I] is TLabel then begin
TLabel(Components[I]).Caption:="MyEdit"+IntToStr(I);
end;
end;
end;


 
Anatoly Podgoretsky ©   (2003-03-27 08:40) [2]

Массив уже есть, это и упоямянутый выше Components и Controls для наследников TWinControl.
С тегими могут быть (и бывают) проблемы, не контроллируемая ООП территория, могут оказаться одинаковые теги или просто неверные. Я видел много ошибок (трудноуловимых) по причине использования тегов.
В некоторых особых случаях действительно нужен массив/список, например и такой есть готовый TObjectList, это нужно когда объектов много или нужна только часть из всего количества однотипных, а теги не хочется использовать по выше указанной причине. Я за свою долгую практику никогда не использовал теги для этой цели, только в строго контроллируемых случаях.


 
ArtemB ©   (2003-03-27 09:04) [3]

В данном случае компонентов TLabel много, а пробегать нужно только по компонентам, кот. называются Label1,...,Label10

Как тогда то быть?


 
Anatoly Podgoretsky ©   (2003-03-27 09:10) [4]

Тогда еще проще FindComponent, без всяких массивов


 
ArtemB ©   (2003-03-27 09:21) [5]

if FindComponent("Label"+"i" ).Name then FindControl.Name:=TablGrid.Columns.Items[i].Title.Caption;

т.е. мне в отчете надо название заголовка таблицы(лабл) сделать такое же как название соответ. столбца DBGrid
(заморочка в том, что нельзя жестко назвать зоголовки в отчете,т.к. пользователь может переставлять столбцы или вовсе убрать их)Поэтому и понадобилось называть их (заголовки в отчете) таким образом.
И к тому же хочется в цикле.... вот и понадобилось Label+"i"....


 
ArtemB ©   (2003-03-27 09:22) [6]

Да... забыл.... так FindComponent не работает... а как???


 
Anatoly Podgoretsky ©   (2003-03-27 09:40) [7]

FindComponent работает отлично


 
Leshiy ©   (2003-03-27 09:45) [8]

ArtemB © (27.03.03 09:22)
Да... забыл.... так FindComponent не работает... а как???


var tg:TComponent;
tg:=FindComponent("Label"+IntToStr(i));
TLabel(tg). ...;



Страницы: 1 вся ветка

Текущий архив: 2003.04.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
1-19596
Opera
2003-03-25 21:48
2003.04.07
Условие


14-19815
Supreme 2
2003-03-19 00:39
2003.04.07
Зачем нужна война с Ираком?


1-19536
vlad40
2003-03-25 09:04
2003.04.07
Memo без ограничения размера


1-19670
I_one
2003-03-26 06:01
2003.04.07
Как можно получить всех потомков выбранного элемента TreeView..?


1-19549
Matvey
2003-03-26 23:43
2003.04.07
Invalid Pointer operation при работе с функцией.?