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

Каким образом обойти громоздские конструкции типа case или if....   Найти похожие ветки 

← →
Sergey__   (2006-06-20 17:43) [0]

Уважаемые мастера, есть следующая проблема. Имеется набор визуальных компонент,к примеру TStaticText, поименованых последовательно s1,s2,s3,s4 и т.д. , так же имеется счетчик, пусть i , принимающий значения 1,2,3,4, и т.д. Можно ли каким-то образом обойтись без конструкций
case i of
1 : s1.Caption =.....
2 : s2.Caption =.....
3 : s3.Caption =.....
.
.
.
end;

или

if i = 1 then s1.Caption =....
if i = 2 then s2.Caption =....
if i = 3 then s3.Caption =....
.
.
.
Если можно, то как ?


← →
begin...end ©   (2006-06-20 17:48) [1]

Можно. См. TComponent.FindComponent.


← →
Desdechado ©   (2006-06-20 17:49) [2]

Form1.Components[j].Name


← →
Плохиш ©   (2006-06-20 17:49) [3]

У FindComponent в справке прямо твой случай разрисован.


← →
Джо ©   (2006-06-20 17:52) [4]

> Можно ли каким-то образом обойтись без конструкций

const
 Captions: array [1..N] of string = ("text1","text2","another text"...);
 Controls: array [1..N] of TStaticText = (...);

// при OnCreate формы заполняем массив Controls
...

затем, при необходимости:
Controls[i].Caption = Captions[i]


← →
jack128 ©   (2006-06-20 22:48) [5]

Джо ©   (20.06.06 17:52) [4]
const
Controls: array [1..N] of TStaticText = (...);


мечтать не вредно :-P


← →
Джо ©   (2006-06-21 00:51) [6]

> [5] jack128 ©   (20.06.06 22:48)
> Джо ©   (20.06.06 17:52) [4]
> const
> Controls: array [1..N] of TStaticText = (...);
>
> мечтать не вредно :-P

Мне сегодня позволительно ;-p


← →
evvcom ©   (2006-06-21 08:44) [7]

> const
> Captions: array [1..N] of string = ("text1","text2","another text"...);

type
 PStaticText = ^TStaticText;
 TMyForm = class(TForm)
   // Следить за порядком следования при добавлении новых! Они должны четко следовать друг за другом!
   StaticText1: TStaticText;
   StaticText2: TStaticText;
   ...
   StaticTextN: TStaticText;
 end;
...
var
 pMyStText: PStaticText;
begin
 pMyStText := @StaticText1;
 for i := 1 to N do begin
   pMyStText^.Caption := Captions[i];
   Inc(pMyStText);
 end;
end;



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

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



Память: 0.46 MB
Время: -0.975 c
15-1151669678
MsGuns
2006-06-30 16:14
2006.07.30
Сожмем кулаки за Украину ?


4-1143568002
que
2006-03-28 21:46
2006.07.30
Делфи и USB(HID complaince & device)


2-1151582908
Id
2006-06-29 16:08
2006.07.30
KEY


5-1136179565
guy1980
2006-01-02 08:26
2006.07.30
FIBPLUS


1-1150459836
oleggar
2006-06-16 16:10
2006.07.30
можно всю форму создать и обслуживать в потоке ?




   Наверх