Главная страница
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.018 c
7-19876
shane54
2003-02-12 00:46
2003.04.07
Размер task bar а


1-19591
Sherlock
2003-03-25 09:19
2003.04.07
Нумерация в Qreport


4-19921
Павел
2003-02-04 09:15
2003.04.07
Запрет на сворачивание


3-19467
Ик сик
2003-03-17 15:59
2003.04.07
Увеличение затрат ОП при использовании ADO


9-19403
Mozg
2002-11-02 14:07
2003.04.07
*****