Tips and Frequently Asked Questions

Using a custom TPlannerItem class
For maintaining custom data with each planner item you can assign any TObject descendent class to the PlannerItem's public Object property. However there is a more convenient way to create a descendent class from TPlanner that has a TPlannerItem with new custom properties which can be used at design time and at run time to hold any additional values with each planner item. The code involved comes down to:
1. Write your descendent class of TPlannerItem and add the additional properties. Override the assign procedure to copy the extra properties added.
2. Write your descendent class of the TPlannerItems collection and override the GetItemClass method to instruct the collection to create collection items from your descendent TPlannerItem class.
3. Write your descendent class of TPlanner and override the protected CreateItems method to let the planner use your descendent TPlannerItems collection.
Following code where a new property MyProperty was added to the TPlannerItem, makes this clear:
Example:
unit MyPlanner; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Planner; type TMyPlannerItem = class(TPlannerItem) private FMyProperty: string; public procedure Assign(Source: TPersistent); override; published property MyProperty: string read FMyProperty write FMyProperty; end; TMyPlannerItems = class(TPlannerItems) public function GetItemClass: TCollectionItemClass; override; end; TMyPlanner = class(TPlanner) private { Private declarations } protected { Protected declarations } function CreateItems: TPlannerItems; override; public { Public declarations } published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('TMS', [TMyPlanner]); end; { TMyPlannerItems } function TMyPlannerItems.GetItemClass: TCollectionItemClass; begin Result := TMyPlannerItem; end; { TMyPlanner } function TMyPlanner.CreateItems: TPlannerItems; begin Result := TMyPlannerItems.Create(Self); end; { TMyPlannerItem } procedure TMyPlannerItem.Assign(Source: TPersistent); begin inherited Assign(Source); if Assigned(Source) then FMyProperty := TMyPlannerItem(source).MyProperty; end; end.
Pricing
Single Developer License
Small Team License
Site License
TMS VCL UI Pack
€ 395
€
175
yearly renewal
license for 1 developer
Includes
check
Full source code
check
Access to the TMS Support Center
check
Free updates and new releases
MOST POPULAR
TMS VCL Subscription
€ 895
€
450
yearly renewal
license for 1 developer
Includes
check
Full source code
check
Access to the TMS Support Center
check
Free updates and new releases
check
TMS VCL UI Pack
check
All TMS VCL products
more_horiz
Discover more
BEST VALUE
TMS ALL-ACCESS
€ 1,795
€
595
yearly renewal
license for 1 developer
Includes
check
Full source code
check
Access to the TMS Support Center
check
Free updates and new releases
check
TMS VCL UI Pack
check
All TMS VCL products
check
All TMS products
more_horiz
Discover more
All prices excl. VAT. Renewal price is subject to change and only valid up to 30 days after license has expired. After renewal period a discount price is offered to renew the license.
Free Trial
Start a free TMS VCL UI Pack evaluation today!Please enter a valid email address
Download started. Your trial key will be provided by email!
By entering your email address you agree to receive email messages from TMS Software.

Note that the TMS VCL UI Pack replaces the TMS Component Pack. Both products can't be installed simultaneously. Therefore TMS Component Pack must first be uninstalled before installing the TMS VCL UI Pack