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

Помогите отработать действия с TTimer.   Найти похожие ветки 

← →
Layner ©   (2004-03-24 09:47) [0]

Есть "Пульт управления" (т.е. форма), где много TShape (ф-я "лампочек"), нужно по сигналу чтобы загорелась "Лампочка" в виде TShape, т.е. простая смена цвета, на период 0,5 секунд и выключилась. "лампочки" создаются динамически, т.е. если есть новый сигнал, я создаю TShape.
sh: array of TShape;
создаем новую "лампочку":

 SetLength(sh, Length(sh)+1);
 sh[a]:=TShape.Create(Self);
 sh[a].Parent:=gb[a];
 sh[a].Width:=11;
 sh[a].Height:=11;
 sh[a].Top:=7;
 sh[a].Left:=170;
 sh[a].Brush.Color:=clBtnFace;
 sh[a].Shape:=stCircle;
 sh[a].Pen.Style:=psClear;


"Светим" в ручную:

 sh[0].Brush.Color:=clAqua;
 sh[0].Pen.Style:=psSolid;

И тут же по таймеру возвращаем нормальный цвет, через 0,5 сек.
Все просто. :)

2.

Теперь задача, как бы засветить определенный sh[a] на 0,5 сек, т.е. если создать TTimer на каждый sh[a],


 Timer[a]:=TTimer.Create(Self);
 Timer[a].Enabled:=False;
 Timer[a].Interval:=500;


и запускать так

Timer[a].Enabled:=True;

но как сделать всем этим timer[a] один обработчик события, и что бы каждый TTimer отработал 0,5 сек.


← →
Zergling ©   (2004-03-24 09:59) [1]

перебирай все свои TShape в одном таймере

if TShape.Tag = 1 моргаем else - нет


← →
Вованчик ©   (2004-03-24 10:02) [2]

а событие можно повесить так:

Timer[a].OnTimer := "Твое событие";


← →
Layner ©   (2004-03-24 10:12) [3]

Спасибо!! я это и делал, только не доделал до конца, Ещё одна вещь, подобная. Нужно что бы каждый таймер считал время с последнего "моргания", т.е. я завожу ещё один массив, например секунд

ss: array of Integer;

И в Timer[a].OnTimer считаю
ss[a]:=ss[a]+1
В принципе так?
У меня просто ошибка в памяти выдавала, но это я что то с адресацией к массивам перемудрил...


← →
Layner ©   (2004-03-24 14:13) [4]

Вопросец возник, есть 2 массива таймеров, 1й и 2й, каждый для своей задачи, как отлавливать события от одного и другого? Я увеличивал TAG 2го на 100, потом отсеивал, но что то не идет, не работают или 1й или 2й таймер..  Или 1й ловит вызовы 2го...


 SetLength(Timer, Length(Timer)+1);        //картинка
 Timer[a]:=TTimer.Create(Self);
 Timer[a].Enabled:=False;
 Timer[a].Interval:=1000;
 Timer[a].Tag:=a;
 Timer[a].OnTimer:=Timer3Timer;

 SetLength(timersec, Length(timersec)+1);  //секундомер
 Timer[a]:=TTimer.Create(Self);
 Timer[a].Enabled:=False;
 Timer[a].Interval:=1000;
 Timer[a].Tag:=a+100;
 Timer[a].OnTimer:=Timer4Second;


Обращаюсь так


procedure Tmf.Timer3Timer(Sender: TObject);
begin
if (Sender as TTimer).Tag < 100 then
.....
end;

procedure Tmf.Timer4Second(Sender: TObject);
begin
if (Sender as TTimer).Tag >= 100 then
.....
end;


Может каким нибудь другим способом можно считать, и получить номер (Sender as TTimer).Tag (Этот номер мне как раз и нужен, для посл. обращения к др. элементам)



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

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



Память: 0.46 MB
Время: 0.028 c
1-1079960435
Kupnu4
2004-03-22 16:00
2004.04.11
Как заставить картинку мигать?


9-1067971745
pavel_k
2003-11-04 21:49
2004.04.11
Быки и коровы


14-1079271705
Undert
2004-03-14 16:41
2004.04.11
А шо за папка WINDOWS SYSTEM32 CONFIG SYSTEMPROFILE ???


9-1070907249
varox
2003-12-08 21:14
2004.04.11
Помогите с DirectX OpenGl пожалуйста!!!


14-1079698034
Kolyan
2004-03-19 15:07
2004.04.11
Про Ping




   Наверх