Наверно лучше сделать это в отдельном потоке, тогда нет смысла запускать таймер, достаточно в цикле потока выставлять Sleep(3000+random(4)*1000) и зажигать лампочку..
С одной стороны, в отдельном потоке не будет подвешивать приложение с другой — всегда можно управлять потоком.
А реализация простая — выбрать в меню создание потока, и в главном цикле метода Execute
procedure MyThread.Execute;
while not terminated do
begin
Sleep(3000+random(4)*1000) ;
Synchronize( ShowLampa);
end;
URL >>вот материал по работе с потоками в Delphiprocedure MyThread.ShowLampa;
begin
if Form1.lampa.visiable <> true then //лампа не «горит»
Form1.lampa.visiable := true;
end;
А в самой форме отрабатывать уже нажатие кнопки.
И «гасить» её
Form1.lampa.visiable := false;