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

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

Наверх




Память: 0.48 MB
Время: 0.03 c
7-1079620750
Falendysh
2004-03-18 17:39
2004.04.11
OLE Container проблема


1-1080196979
X9
2004-03-25 09:42
2004.04.11
Ошибка при вызове функции из DLL.


3-1079356480
TEXHAPb
2004-03-15 16:14
2004.04.11
Проблема с выполнением запросов в цикле


3-1081722170
Lamer3
2004-04-12 02:22
2004.04.11
Запрос..... простой


1-1079724496
Batoon
2004-03-19 22:28
2004.04.11
просто КЛАСНЫЙ КРАСИВЫЙ интерфейс