Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
7-19896
X-stasy`
2003-02-08 23:47
2003.04.07
Флоповод


1-19660
h@1f-e1f
2003-03-25 20:59
2003.04.07
Выделение в StringGrid


1-19582
Tornado
2003-03-28 13:25
2003.04.07
ДОС-команда


3-19470
Unone
2003-03-19 07:41
2003.04.07
Фильтрация данных


3-19433
off
2003-03-18 14:30
2003.04.07
В IB есть такая приблуда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский