Форум: "Основная";
Текущий архив: 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.036 c