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

Вниз

Имя TComponent в качестве переменной?   Найти похожие ветки 

 
Valeris   (2002-10-23 10:31) [0]

Помогите плиз.

Есть 15 ProgressBar (ProgressBar1, ProgressBar2...ProgressBar15), как бы так сделать чтобы в зависимости от значения переменной i(1..15) можно было обращаться к нужному ProgressBar.


 
Smithson   (2002-10-23 10:33) [1]

Вариант самый простой - массив прогресбаров. Если они создаются не динамически, а на этапе проектирования, то присвой каждому в значение Tag числа 1..15 и ищи по этому значению в Form1.Components или Form1.Controls


 
Skier   (2002-10-23 10:36) [2]

>Valeris
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035271147&n=0


 
Dynamit   (2002-10-23 10:42) [3]


Var
j: Integer;
begin
For j:=0 To XForm.ControlCount-1 Do
If PCBoxes.Controls[j] is TProgressBar Then
Begin
If (PCBoxes.Controls[j] As TProgressBar).Name="ProgressBar"+IntToStr(i) Then
Begin
//действия
End;
End;
end;


XForm - контейнер, владелец объектов ProgressBar.

Метод медленный, зато универсальный


 
Dynamit   (2002-10-23 10:43) [4]

Извини, забыл исправить:

Var
j: Integer;
begin
For j:=0 To XForm.ControlCount-1 Do
If XForm.Controls[j] is TProgressBar Then
Begin
If (XForm.Controls[j] As TProgressBar).Name="ProgressBar"+IntToStr(i) Then
Begin
//действия
End;
End;
end;


 
Юрий Зотов   (2002-10-23 11:22) [5]

> Метод медленный, зато универсальный

Медленный - да. Универсальный - нет. Сработает ТОЛЬКО для TProgressBar"ов, лежаших на самой форме. А если на панели, в GroubBox"е или где угодно еще - не сработает .


 
Dynamit   (2002-10-23 11:41) [6]


> Юрий Зотов


Один мой преподаватель шутил: "Итерациями, батенька, итерациями".
Можно же перебрать контролы и в рекурсию, если они суть контейнеры!


 
Юрий Зотов   (2002-10-23 12:11) [7]

Да, можно. Но будет еще медленнее, причем намного. Это, конечно, тоже способ, но не самый лучший. Если ProgressBar"ы положены на форму в design-time, то простая замена массива Controls на массив Components будет действительно универсальной и без рекурсий. Если же они создаются в run-time - логично использовать массив или список.


 
Alex4444444444   (2002-10-23 12:16) [8]

А почему не перебирать Components? Они все на форме (обычно :)


 
Skier   (2002-10-23 12:18) [9]

>Alex4444444444


> Они все на форме...


Это в случае когда компоненты
создаются в design-time...<


 
Alex4444444444   (2002-10-23 12:25) [10]

В run-time просто сделайте массив. (Я так понял, все проблемы как раз из-за design-time.) Потом, кто ж мешает в run-time писать .Create(MyForm) ?


 
panov   (2002-10-23 12:32) [11]

procedure form1.GetProgressBar( const nBar: Integer): TProgressBar;
begin
Result := TProgressBar(FindComponent("ProgressBar"+IntToStr(nBar)));
end;



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

Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
14-11385
cyborg
2002-10-16 21:19
2002.11.04
Сны...


7-11494
Sergserg
2002-08-28 18:36
2002.11.04
Значек Мой компьютер


3-11076
ddorixe
2002-10-14 14:59
2002.11.04
Could not find record


4-11549
Troll
2002-09-22 12:53
2002.11.04
Как перехватить...


14-11412
Svin
2002-10-14 13:32
2002.11.04
Знакомства





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский