Вниз
Скачать: CL | DM;

Имя 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.012 c
14-11404
FLiz
2002-10-14 11:39
2002.11.04
При вставки из буфера вместо рус. букв знаки вопроса


4-11540
Semion
2002-09-21 08:01
2002.11.04
Пямятуха


3-11127
alex_R
2002-10-15 15:27
2002.11.04
Как вызывать хранимые функции Oracle через ADO


1-11178
Mav
2002-10-19 10:52
2002.11.04
Может мне кто нибудь объяснить ответ на мой вопрос популярно ???


14-11477
Иришка
2002-10-16 13:11
2002.11.04
Помогите бедной девушке




   Наверх