I have a Task-Scheduler Object that basically takes
TTriggerProc=procedure(Triggername:String)of object;
TSchedulerTask=Record
ID:Cardinal;
Name:String;
TriggerTime:TDateTime;
TriggerProc:TTriggerProc;
End;
for each task. I want to keep those tasks through a restart of the application.
Currently I save the names of the task and the Triggertime to the registry and on load use a (huge) if...then..else...if...else..if...else..if...else to assign the TriggerProc according to the name.
Can i store the TriggerProc so that it works after the load again? Or can I build some CONST-array to map names to procs? I tried to build a record array but didnt work with the ProcTask:
TaskLoader=Record
Taskname:String;
TaskProc:TTriggerProc;
end;
TTaskLoaderArr=Array of TTaskLoader;
Const
Task1:TTaskLoader=(Taskname:'Firsttask';TaskProc:EndBathTime);
throws error E2026 "Expected a constant" (translated)
The use of this looks like this (as a code sample was requested):
procedure TMain.TaskProc1(Taskname:String);
Begin
...
end;
procedure TMain.AssignTask;
Begin
Scheduler.AddTask('Task1',IncHour(Now,1),TaskProc1);
end
procedure TMain.ReloadTask(TaskName:String;TriggerTime:TDateTime);
Begin
If TaskName='Task1' then
Scheduler.AddTask(TaskName,TriggerTime,TaskProc1)
else
.
.
.
end;
I would like to turn the ReloadTask
into something like
procedure TMain.ReloadTask(TaskName:String;TriggerTime:TDateTime);
Const
TaskConst:TTaskLoaderArr=[(Taskname:'Task1';ProcTrigger:TaskProc1)]
Begin
for task in TaskConst do Begin
If Task.taskname=Taskname then
Scheduler.AddTask(Taskname,TriggerTime,Task.ProcTrigger)
end;
End;