Frequently Asked Component Specific Questions
Options |
Display all FAQ items |
Displaying items 1 to 1 of 1, page 1 of 1
<< previous next >>
TPlanner
Using a custom TPlannerItem class
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.