1 unit cePointerFrame;
2 
3 {$mode objfpc}{$H+}
4 
5 interface
6 
7 uses
8   Classes, SysUtils, Forms, Controls, StdCtrls, ExtCtrls, Spin,
9   TATypes, TAChartCombos, TAGraph,
10   ceBrushFrame, cePenFrame;
11 
12 type
13 
14   { TChartPointerFrame }
15 
16   TChartPointerFrame = class(TFrame)
17     cbPointerStyle: TChartComboBox;
18     GroupBox1: TGroupBox;
19     gbPointerBrush: TGroupBox;
20     gbPointerPen: TGroupBox;
21     lblPointerSize: TLabel;
22     sePointerSize: TSpinEdit;
23     procedure cbPointerStyleChange(Sender: TObject);
24     procedure sePointerSizeChange(Sender: TObject);
25   private
26     FPointer: TSeriesPointer;
27     FPointerBrushFrame: TChartBrushFrame;
28     FPointerPenFrame: TChartPenFrame;
29     FOnChange: TNotifyEvent;
30     procedure ChangedHandler(Sender: TObject);
31     procedure DoChange;
32   protected
GetChartnull33     function GetChart: TChart;
34   public
35     constructor Create(AOwner: TComponent); override;
36     procedure Prepare(APointer: TSeriesPointer);
37     property OnChange: TNotifyEvent read FOnChange write FOnChange;
38   end;
39 
40 implementation
41 
42 {$R *.lfm}
43 
44 type
45   TSeriesPointerAccess = class(TSeriesPointer);
46 
47 constructor TChartPointerFrame.Create(AOwner: TComponent);
48 begin
49   inherited;
50   cbPointerStyle.DropdownCount := DEFAULT_DROPDOWN_COUNT;
51 
52   FPointerBrushFrame := TChartBrushFrame.Create(Self);
53   FPointerBrushFrame.Name := '';
54   FPointerBrushFrame.Align := alClient;
55   FPointerBrushFrame.AutoSize := true;
56   FPointerBrushFrame.BorderSpacing.Around := 8;
57   FPointerBrushFrame.OnChange := @ChangedHandler;
58   FPointerBrushFrame.Parent := gbPointerBrush;
59   gbPointerBrush.Caption := 'Fill';
60   gbPointerBrush.AutoSize := true;
61 
62   FPointerPenFrame := TChartPenFrame.Create(self);
63   FPointerPenFrame.Name := '';
64   FPointerPenFrame.Align := alClient;
65   FPointerPenFrame.AutoSize := true;
66   FPointerPenFrame.borderspacing.Around := 8;
67   FPointerPenFrame.OnChange := @ChangedHandler;
68   FPointerPenFrame.Parent := gbPointerPen;
69   gbPointerPen.caption := 'Border';
70   gbPointerPen.AutoSize := true;
71 
72   AutoSize := true;
73 end;
74 
75 procedure TChartPointerFrame.cbPointerStyleChange(Sender: TObject);
76 begin
77   FPointer.Style := cbPointerStyle.PointerStyle;
78   DoChange;
79 end;
80 
81 procedure TChartPointerFrame.ChangedHandler(Sender: TObject);
82 begin
83   DoChange;
84 end;
85 
86 procedure TChartPointerFrame.sePointerSizeChange(Sender: TObject);
87 begin
88   FPointer.HorizSize := sePointerSize.Value;
89   FPointer.VertSize := sePointerSize.Value;
90   DoChange;
91 end;
92 
93 procedure TChartPointerFrame.DoChange;
94 begin
95   if Assigned(FOnChange) then FOnChange(FPointer);
96 end;
97 
GetChartnull98 function TChartPointerFrame.GetChart: TChart;
99 begin
100   Result := TSeriesPointerAccess(FPointer).GetOwner as TChart;
101 end;
102 
103 procedure TChartPointerFrame.Prepare(APointer: TSeriesPointer);
104 begin
105   FPointer := APointer;
106   cbPointerStyle.PointerStyle := APointer.Style;
107   sePointerSize.Value := APointer.HorizSize;
108   FPointerBrushFrame.Prepare(APointer.Brush);
109   FPointerPenFrame.Prepare(APointer.Pen);
110 end;
111 
112 end.
113 
114