![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Когда-то делал такое, но что-то позабыл как
![]() Суть задачи на форме у меня несколько таймеров (Timer1, Timer2, Timer n) надо в цикле присвоить длая каждого из та ймеров рандомный интервал. думал так: Код:
for i:=1 to 11 do
begin
v := 'Timer'+IntToStr(i);
v.Interval := RandomRange(0, 1);
end;Как это делается? |
|
#2
|
||||
|
||||
|
Так устроит?
Код:
for I :=1 to 11 do
TTimer(FindControl('Timer' + IntToStr(I))).Interval := RandomRange(0, 1); |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
lostbananan (23.02.2013)
| ||
|
#3
|
|||
|
|||
|
А почему бы и нет, если, конечно, это работает
![]() |
|
#4
|
|||
|
|||
|
А он не работает: incompotable types HWND and String...
Абидна (красвиво код смотрится) ![]() |
|
#5
|
||||
|
||||
|
Работает, только я допустил ошибку. Нужно так:
Код:
for I :=1 to 11 do
TTimer(FindComponent('Timer' + IntToStr(I))).Interval := RandomRange(0, 1); |
|
#6
|
|||
|
|||
|
компилятор код пропускает, но... значит так у меня каждый таймер при срабатывании сдвигает позицию прогресс бара... Что не правильно?
|
|
#7
|
||||
|
||||
|
Не знаю что вы хотите добиться, но по сути данный код бесполезен.
|
|
#8
|
|||
|
|||
|
Сначала опишщу чего я хочу добиться (суть задачи) на форме 11 прогресбаров и 11 таймеров, по-началу запускается таймер №1 при срабатывании позиция прогресбара№1 +1... когда позиция прогресбара становится равной 100 - таймер№1 выключается, включается таймер№2 ккоторый двигает позицию прогресбара№2 соответственно и так до 11..
Т.е. имитация каких-то процессов в прогресе последовательно... |
|
#9
|
||||
|
||||
|
Хватит и одного таймера
Код:
var
pBar : Integer = 1;
procedure TForm1.Timer1Timer(Sender: TObject);
var
pb : TProgressBar;
begin
pb := FindComponent('ProgressBar' + IntToStr(pBar));
pb.Position := pb.Position + 1;
if pb.Position >= 100 then
inc(pBar);
if pBar > 11 then
Timer1.Enabled := False;
end; |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
lostbananan (23.02.2013)
| ||
|
#10
|
|||
|
|||
|
Спасибо, вроде сходу то что надо, посмотрю-проверю...
на строке Код:
pb := FindComponent('ProgressBar' + IntToStr(pBar));А почему? Ведь прогрессбар наследок ТКомпонент.. Что делать? Люди добрые, помогите - очень нужно!!! Здесь есть кто живой или никто не знает? Последний раз редактировалось lostbananan, 23.02.2013 в 20:06. |
|
#11
|
||||
|
||||
|
Код:
var
pBar: integer = 1;
flg : boolean = false;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if flg then
begin
Inc(pBar);
flg:= false;
end;
with (FindComponent('ProgressBar' + IntToStr(pBar)) as TProgressBar) do
begin
Position:= Position + 1;
if (Position >= 100) and (pBar <= 11) then flg:= true;
if (pBar >= 11) and (Position >= 100) then Timer1.Enabled:= False;
end;
end; |
|
#12
|
|||
|
|||
|
Так в чем проблема, почему TProgressBar и TComponent несовместимы, когода TProgressBar наследник TComponent? И как с этим бороться?? Ответ увидел - сейчас проверю, но заранее спасибо..
Код откомпилировался, но при запуске прогресбары все как один на нуле - нет движения!!! Все по поводу движения исправил, там для таймера был задан неправильный интервал, но: 1. Прогресс идет скажем так на Pb1.Position+1 потом на Pb2.Position+1 и т.д... а надо чтобы прогресбар Pb1.Position0-100 прошел ВЕСЬ потом Pb2.Position, Pb3.Position и т.д. 2. НА строке кода: Код:
if (pBar >= 11) and (Position >= 100) then Timer1.Enabled:= False; Последний раз редактировалось M.A.D.M.A.N., 24.02.2013 в 10:13. |
|
#13
|
||||
|
||||
|
В отладке посмотреть не судьба?
Опять начинается эпопея с двухнедельным флудом и разъяснением базовых вещей. Последний раз редактировалось M.A.D.M.A.N., 24.02.2013 в 10:24. |
|
#14
|
||||
|
||||
|
__________________________________
|
|
#15
|
||||
|
||||
|
Опять поторопился
Код:
var
pBar : Integer = 1;
procedure TForm1.Timer1Timer(Sender: TObject);
var
pb : TProgressBar;
begin
pb := TProgressBar(FindComponent('ProgressBar' + IntToStr(pBar)));
if Assigned(pb) then
begin
pb.Position := pb.Position + 1;
if pb.Position >= 100 then
inc(pBar);
if pBar > 11 then
Timer1.Enabled := False;
end;
end;Теперь не говори, что опять что-либо не заработает - специально протестировал. P.S. Alegun, зачем лишние телодвижения с флагом и ненужные проверки? |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
lostbananan (24.02.2013)
| ||