0

In a program using the OmniThread library, how can I pass a TRect in SetParameter? Example:

procedure TestParameters(const ATask: IOmniTask);
begin
  // how can I access the TRect here?
end;

FTestTask := CreateTask(TestParameters, 'TestParameters')
               .MonitorWith(OTLMonitor)
               .SetParameter('FormRect', Self.ClientRect) // does not work
               .Run;

Is there a general rule how to use different types in SetParameter?

user1580348
  • 5,721
  • 4
  • 43
  • 105

1 Answers1

4

Use TOmniValue.FromRecord<T> and TOmniValue.ToRecord<T>.

procedure TestParameters(const ATask: IOmniTask);
var
  formRect: TRect;
begin
  formRect := ATask.Param['FormRect'].ToRecord<TRect>;
end;

FTestTask := CreateTask(TestParameters, 'TestParameters')
               .MonitorWith(OTLMonitor)
               .SetParameter('FormRect', TOmniValue.FromRecord<TRect>(ClientRect))
               .Run;
gabr
  • 26,580
  • 9
  • 75
  • 141