You can still do that with just 1 TTimer, but you need to set it use the minimum allowed interval. Some code:
type
TPeriodicEvent = record
ticks, current: integer;
name: string;
// Add maybe a pointer to procedure?
end;
...
events: array of TPeriodicEvent;
...
procedure TForm1.Timer1Timer(Sender: TObject);
var e: integer;
begin
for e:=0 to high(events) do
with events[e] do begin
inc(current);
if current >= ticks then begin
current:=0;
// Do something...
end;
end;
end;
You can for example set the interval to 100, so if you want to run 1 event every 1 second, you set its ticks to 10. Ticks 0 or 1 will run every time. (if i'm thinking this right...) But you can have any number of timers, and start them at different times.