Skip to content

Tool Properties

By Optuma Team · Updated 2019-10-16

Tool Properties are developer defined properties that can be shown in the properties panel and can be set by the user and used in the programming of the tool. To add a custom tool property, call the Add.. function on a tool E.g. Tool.AddBoolean().

The following lists the Tool Properties that can be added to a tool.

function AddInteger(sName, sCaption : String; iDefault : Integer) : TIntegerProperty;
function AddBoolean(sName, sCaption : String; bDefault : Boolean) : TBooleanProperty;
function AddList(sName, sCaption: String; sItems : String; iDefaultIndex: Integer) : TListProperty;
function AddReal(sName, sCaption : String; rDefault : Real) : TRealProperty;
function AddHeading(sName, sCaption : String) : THeadingProperty;
function AddDate(sName, sCaption : String, default : TDateTime) : TDateProperty;

Running code when the property changes

To run code when the property is changed by a user we create a OnPropertyChange procedure which will get called automatically, passing the variable that changed.

procedure OnPropertyChange(aVar : TProperty);
begin
if aVar.Name = 'VARNAME' then
begin
// do something with aVar which is the property that changed
end;
end;

Adding an Integer Tool Property

To add a tool property we first need to declare the tool property variable. In this example we are creating an Integer property that we will use to set the bars on a moving average tool.

var
aBars : TIntegerProperty;

To create the property we need to call AddInteger on the Tool. The call has three parameters

  • Property Name - This is the id of the property
  • Display Name - This is the name that will be displayed in the properties panel.
  • Default Value - This is the initial value of the property.
aBars := Tool.AddInteger('BARS', 'Bars', 50);

Using the Integer Tool Property

To use the value of the property we use the .Variable property to access the Integer value.

procedure Process(Tool : TTool; ProcessStart : Integer; ProcessEnd : Integer; DataIn : TDataList);
begin
Plot1.Data := MA('CALC=CLOSE, BARS='+IntToStr(aBars.Variable), DataIn.Data);
end;

Adding an Boolean Tool Property

To add a tool property we first need to declare the tool property variable. In this example we are creating an Boolean property that we will use to show or hide the moving average tool.

var bShowTool: TBooleanProperty;

To create the property we need to call AddBoolean on the Tool. The call has three parameters

  • Property Name - This is the id of the property
  • Display Name - This is the name that will be displayed in the properties panel.
  • Default Value - This is the initial value of the property.
bShowTool := Tool.AddBoolean('SHOW', 'Show/Hide Plot', True);

To run code when the property is changed by a user we create a OnPropertyChange procedure which will get called automatically, passing the variable that changed. To use the value of the property we use the .Variable property to access the Boolean value.

procedure OnPropertyChange(aVar : TProperty);
begin
if aVar.Name = 'SHOW' then
begin
Plot1.Visible := TBooleanProperty(aVar).Variable;
end;
end;

To add a tool property we first need to declare the tool property variable. In this example we are creating an list (drop down) property that we will use to set the calc type of the moving average tool.

var aList : TListProperty;

To create the property we need to call AddList on the Tool. The call has three parameters

  • Property Name - This is the id of the property
  • Display Name - This is the name that will be displayed in the properties panel.
  • Default Value - This is the list of values of the property. The different value are separated with a | character.
  • Default Index - This is the index of the initial value. Where 0 is the index for the first item in the list.
aList := Tool.AddList('LIST','Calc Type', 'CLOSE|HIGH', 0);

To get the string value of the list property we use the GetDisplayValue() function for the property which returns a string;

procedure Process(Tool : TTool; ProcessStart : Integer; ProcessEnd : Integer; DataIn : TDataList);
begin
Plot1.Data := MA('CALC='+aList.GetDisplayValue()+', BARS=5', DataIn);
end;

To add a real or double property we first need to declare the real property variable.

var aData: TRealProperty;

To create the property we need to call AddReal on the Tool. The call has three parameters

  • Property Name - This is the id of the property
  • Display Name - This is the name that will be displayed in the properties panel.
  • Default Value - This is the initial value of the property.
aData := Tool.AddReal('DATA', 'Data', 50.5);

To use the value of the property we use the .Variable property to access the real value.

procedure Process(Tool : TTool; ProcessStart : Integer; ProcessEnd : Integer; DataIn : TDataList);
begin
Print(aData.Variable)
end;

To add a colour property we first need to declare the property variable.

var Color : TColorProperty;

To create the property we need to call AddColor on the Tool. The call has three parameters

  • Property Name - This is the id of the property
  • Display Name - This is the name that will be displayed in the properties panel.
  • Default Value - This is the initial color of the property.
Color := Tool.AddColor('MyColor', 'MyColor', clRed);

To use the value of the property we use the .Variable property to access the color.

procedure OnPropertyChange(aVar : TProperty);
begin
if aVar.Name = 'MyColor' then
begin
Plot1.FillColor := TColorProperty(aVar).Variable;
end;
end;

A heading property can be used to group other properties under a heading. To add a heading property, first declare a heading property variable.

var aHeading: THeadingProperty;

To create the property we need to call AddHeading on the Tool. The call has two parameters

  • Property Name - This is the id of the property
  • Display Name - This is the name that will be displayed in the properties panel.
aHeading:= Tool.AddHeading('HEADER1','My Heading');

To add child properties to the heading variable, call the appropriate Add… function. E.g. This will add a Integer property variable to the heading.

MyInt := aHeading.AddInteger('INT1', 'My Int', 10);

##Date Property

A date property can be used to display a date in properties panel.

var aDate: TDateProperty;

To create the property we need to call AddDate on the Tool. The call has three parameters

  • Property Name - This is the id of the property
  • Display Name - This is the name that will be displayed in the properties panel.
  • Default Value - The default date as a TDateTime - usually now()
aDate:= Tool.AddDate('DATE1','My Date', now());
dd := Tool.AddDate('MyDate','My Date', now());
dd.Variable := StrToDate('02/02/2018'); // uses windows short date format

You can use the StrToDate to generate a TDateTime value from a string.

Forum Discussion

Choose which categories of cookies you allow. Strictly-necessary cookies are always on. You can change this any time via the "Cookie Settings" link in the footer.

  • Functional

    Remember preferences like dismissed banners and your dark-mode choice.

  • Analytics

    Help us understand how the site is used so we can improve it.

  • Marketing

    Measure our advertising and help us reach people who may be interested in Optuma.