Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.04;
Скачать: 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 вся ветка

Текущий архив: 2002.11.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
7-11528
МИФИст
2002-08-28 16:17
2002.11.04
Быстрый поиск в RichEdit е...


3-11053
vasily5000
2002-10-14 08:06
2002.11.04
Не могу заставить работать одновременно IBase и CGI.


14-11468
Anatoly Podgoretsky
2002-10-09 19:11
2002.11.04
ПЕРЕПИСЬ


1-11242
Beglec
2002-10-23 02:30
2002.11.04
Интересный косяк


1-11310
brestmarket
2002-10-23 18:30
2002.11.04
Как получить иконку определенного exe-файла?