Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизПомогите отработать действия с 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.044 c