TAChart: Extend listbox demo to show sorting.

git-svn-id: trunk@64434 -
This commit is contained in:
wp 2021-01-29 15:18:54 +00:00
parent b5423bfb19
commit b269bcc49f
2 changed files with 240 additions and 4 deletions

View File

@ -68,6 +68,10 @@ object Form1: TForm1
Title = 'cos(x)' Title = 'cos(x)'
LinePen.Color = clBlue LinePen.Color = clBlue
end end
object ExpSeries: TLineSeries
Title = 'exp(-x)'
LinePen.Color = clGreen
end
end end
object ListboxPanel: TPanel object ListboxPanel: TPanel
Left = 754 Left = 754
@ -80,8 +84,10 @@ object Form1: TForm1
ClientWidth = 138 ClientWidth = 138
TabOrder = 1 TabOrder = 1
object ChartListbox: TChartListbox object ChartListbox: TChartListbox
AnchorSideBottom.Control = Panel2
Left = 6 Left = 6
Height = 407 Height = 379
Hint = 'Move up'
Top = 6 Top = 6
Width = 126 Width = 126
Chart = Chart Chart = Chart
@ -90,11 +96,65 @@ object Form1: TForm1
OnItemClick = ChartListboxItemClick OnItemClick = ChartListboxItemClick
OnPopulate = ChartListboxPopulate OnPopulate = ChartListboxPopulate
OnSeriesIconDblClick = ChartListboxSeriesIconDblClick OnSeriesIconDblClick = ChartListboxSeriesIconDblClick
Align = alClient Anchors = [akTop, akLeft, akBottom]
BorderSpacing.Around = 6 BorderSpacing.Around = 6
ItemHeight = 20 ItemHeight = 20
TabOrder = 0 TabOrder = 0
end end
object Panel2: TPanel
Left = 0
Height = 22
Top = 391
Width = 138
Align = alBottom
AutoSize = True
BorderSpacing.Bottom = 6
BevelOuter = bvNone
ClientHeight = 22
ClientWidth = 138
TabOrder = 1
object BtnUp: TSpeedButton
AnchorSideRight.Control = BtnDown
AnchorSideBottom.Control = Panel2
AnchorSideBottom.Side = asrBottom
Left = 31
Height = 22
Top = 0
Width = 23
Anchors = [akRight, akBottom]
BorderSpacing.Right = 4
Images = ImageList
ImageIndex = 1
OnClick = BtnUpClick
end
object BtnDown: TSpeedButton
AnchorSideLeft.Control = Panel2
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = BtnUp
Left = 58
Height = 22
Hint = 'Move down'
Top = 0
Width = 23
Images = ImageList
ImageIndex = 0
OnClick = BtnDownClick
end
object BtnSort: TSpeedButton
AnchorSideLeft.Control = BtnDown
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = BtnUp
Left = 85
Height = 22
Hint = 'Sort by title'
Top = 0
Width = 23
BorderSpacing.Left = 4
Images = ImageList
ImageIndex = 2
OnClick = BtnSortClick
end
end
end end
object Splitter: TSplitter object Splitter: TSplitter
Left = 749 Left = 749
@ -382,6 +442,106 @@ object Form1: TForm1
'ColorT=A4A0A0' 'ColorT=A4A0A0'
) )
Left = 496 Left = 496
Top = 128 Top = 152
end
object ImageList: TImageList
Left = 808
Top = 320
Bitmap = {
4C7A0300000010000000100000002D0200000000000078DA6360189C607FB5FB
E77D55AEFF4118C426553F48DFFF33ABC018C41E69FA7757B8C0F583D8A4EADF
52E208D70F6213AB6F7D81FDB375F976FF37153BFF86E907B14162203942FA97
E7DA7AAF2974FAF679DF2CB8FD5FF6CFFDBFB6D0F9DBF23CFB4062DCB024D336
634DB1FB971F4717FDFF796CF1FFB5251E5F16E7D8E493E2FFF9E9B6FDEB2B02
3E6FA8F0FF3A3FC36E02A9E1070C30C659A936EB4118C4661805740D3F4AE28F
92F44369FADD50E800C93F2548F9A704927F4072B4CEBFD42A3F467AF94B69FD
3550E0749DD88D3375E24F5685323093AAF74CADB8F9E93AF19F207CAA4EDC19
234F1FC8FE0FC238EDAE179F7CAA567C33089FAE9358842EFF7347E27F10C61A
DE0D0C2C407B5F9CAE158B3B5527160D647F395226C28BACE6D386F0FF208C4D
FFC906711FA09EFF40BF5F05D25740EC53B51209C86ADEACF0F90FC2D8C34D7C
05101F3B5D2B9E06C5FB411859CDB3054EFF41185DEF8906213EA0DEAFC0F08B
828901C3CF1728F6EF7483B8124CECC10C8BFF204C6EDCDE9CA0F71F84B1CB5E
DDC2C070E53F2ABEBA0E59C5E50E95FF208C43BF0A03C3256308BED20CC47F81
3A8290559C6D90FC0FC2F85D79CD02A8F72B502FBCBC3D5AC137FF5805FF7F64
0C12C3E2066DA0DE7740DC8B2CBAB38481FB4021EBD50305ACFFC118C80689A1
EABD2803D4F708885701532A13467990CDA0BD3787E10B0883D868F6F200F55D
87E0AB5AC0305082E0CBB2C8AAF6E632248030F6B0430F7B30BE46EBFC0E00D9
C2FB81
}
BitmapAdv = {
4C69020000004C7A030000001800000018000000D50300000000000078DAED98
5B481451188027BA3C280459BA5B419650041A3D1404B96A79290DED06EB4318
D8CD5A2F99B66A29AE07BAA02FF9509482B1DECA34DD954D22235DB29BB94B17
5BBB503D0419095D30772A8B3CFDFFECA4EBEECEECAAB3E1C31EF8F0E7CC3F9F
33FF9C33FF28C3F8C65406659819C6A2CD439D8571D41E9CC36352F8D1474D8D
949A9B6C40CCCDF9FC3EFF34F0DF2C8871F2737312F9AFE7453BF9B93989FC86
DC0D4E7E6E6E0A7EFD91A87E5D7624450C47637E3BF961EEDF71CC9DA8BF314B
11ABCB8D61BFDE3C3FE67560F0D605AACF8DFE7E35333C6132F7D09019B9AB25
2796B51AAB9CDC6CD745AACB8D63AFA8147BA652FF7A55445673CE26F6C79DEA
51F7CFBBB554A78E672F6744E549F18EAE51294A9BD509D6E17B75F4D7837AAA
CF4FB4D6A9224BA5EC03DAB4F06A43E176ABA168075B7D505123759F69522A67
56A5851B108C7D9DD737A6D3F0F6FAB4EDAF9D5ED95FB5871465BAFCC4217C37
FCEEBE445B8F250DD5A6479449E1F6E6FBCD93F773438662EF64DC9EF5970AE8
2FB16CE3E1C82D13F5B7E66CF830DA1FD52EFAA37AAC3F62EE74EBEFFFF3FBC4
DBDF57BEEF5B9F7F3AFBBDF9F7B56FB81E3D2430DEAC91179834B26DDEF89F09
78DF02B447231B30A731B305738DE90A7A3BA38003624FFC6612A840F73FE077
2409E5FE31A69311A38A22187BE20767057ACD25415ADBEF90370BE50EB7EF27
BFDAF751046377EE3E123A079C9F806FDD24602EFCFC020C3F3CBE78BEAB7CF6
5A0AF9DE9642118CDDF91F6A8276F0D75CCBD58ABF07B32648E52A7F509F4C06
F54A6A23D9ADDF542C6FE16A5E2C4F37115908D4FE00FF1CBA5DE57F6EDC4A00
CA23EAEF3DB6641E787EDA3F5B7BCC64D14AC77306EAE2C940FD66CA01B1F8B5
CBD2F8DA3C3295C82A47816BB7D54876DAF19C7E6D34E9D76EA436A245FD3D9A
A02EAE36B0B7C6ADD762D93ADEFFBE49C98CFB767E57B99E009447D0FFA86861
30384670BDE01A725EB3F257DCBD1159ACFDFCEBB36BC99B736B2882B1D47BFD
45791879591E46118CDDAC7E25C3582A8579BEDDF18C67652B88A56C39453016
F75BCE005498BE538E673C3EB1943C39194C118CDDDC2DECD1DE90F13CCBE3FD
5FC11FEAF45C889C984BE414C17862D5ED8D02EF0F6018DC31A3EBAC2020F4C1
F17956800A60C51C37EE55E0FD028CC03DEC763CDA95E79F7A47ED475D81C7C4
DD4F9781F7035F977CA12C63F64C2D401DD08ABB5F2D805ABCE4DD956299ED6A
C6BF2393E903284F1FCE8974163F70DFE7D74A1B5CE12C774FA833830905AF15
C158C40D3DD07283BF6E13D4C8DFD355D091C5A4226EF6D63ABBB5FE1178EB82
86C9EF74CB6A01A7447EEF8CBF26FFB5334C7A0300000020000000200000005F
0400000000000078DAED996B4814411CC0B7A430A23E48DD9E2154147DF14BF5
21A2EB32EB2C2CC2A82CFA5004D9434F8DD3F322E5AEA50F6112512151625DF6
B0BABCF42A04CB175657E4258477D1038AA2300A7AD05E5656FF6674BB1BCFDD
BB59F56E0B77E087EBBC7EB333B3B3337B0CA30635D0056098512D25CBBF3417
A78118380DE789969FE3B8D1D8F3BBDD01E0E90F8EC369388FEA57FDAA5FF547
C3DFB8C720E9C769D1F637EC5E2AE9C769D1F6D7172D91F4E3B468FBAF15A64A
FA71DA70FA5D85A96FEA4C294072BDC8D003ED9706F8711C4E0BCD8FEB18ACFF
72BE7EA9ABC0E0FFD8503ED017814F378F81CB6CF0D7E6A6A40FA50F6A7217AF
AE3519FC9F1B8F53BBBF3457405D419ABF267FD1FAE118870BC6944D574C697E
BEB532A2DBDF7A126A91FBA2519F359C73AF3A5B9FE744F57E6DB34BBABB6F9D
06A779395F6D4C298AC6FC3F93B3B0D051B08CFF8A3CA1EE6FB7ABA006B9CFE6
E8ADD1DC0356EDD0955D36A7F3DFEE9C0DB87FB8CF81D3B292AFCAD697C5621F
6ADFAE2B775A56F13D77CF43CFBD6AA8DB93C1DB772CAC8CE53EB8326BC14557
F11ADE55B2C67F729BEE5234F7BD62C191991957B155578FC1D7EAE9440D6A50
C348587F945E7F957CFF28F9FE5572FFA1E4FE4BC9FDA792FB6FA5CF1F2EF392
81E72F4B98F39745E4FC85EAF85FCF9FFFE2F95BE9EF0F4A7F7F51BFBFA97ED5
AFFA95F02BFDFB9B1A465E68B7B1A508E8652F7B22A6E73C8E198DBCAF027E1B
FBC96D4A1A172BBFC7A64D25DCBDDCB7B11BA8DADE6A049241F67DA5E07D8BE8
EABBD6D4D394FDD5BC1348E4BA5BB869F1C8F7517096A3BF4785B6FCF4144F4A
8C54FEC78DAD4022D77FDFAA5D1FE8732E7151BB55A30BFC6FD5982395EFAEDF
0C24B2FBDECABA045F97239389C3EBAAC7C6BE10E2BC91CAF3573702891CB79B
4B4A408EEFBDF7BA973D129C0F9AB2BF7DE0E1A6CC0D57C7E72BEB804466DFE7
04E6BC95AD15D6008C23300644BBC4C207470690C89CF7EED0E74E84779EEDCC
18A93ADE57AF00125AF7036EF24C54F76FC1F112E109E139D1860CA97ABACEA4
0109FDBD6BB940FD9C765E687A4749E2D440FBAC5AA7543DAF4F2D061219FE27
7FEF5D6A2F418CCF77340F2789E57959A10312BABE67E707DF359A0361DA680C
8E81D62896E7F9B1794012EBF7E6B3A3B38124D6FEC787928184BE646736C378
8192CD52B5F8CA660149ACFD0FF74F071219FE19A8F599E2784B09F7FBBEBCE2
A1635F12900C7D44B1CBFB567077237411D6D07EEBE5D0DC1D9391EFA9E0FE85
581B9AE35E71821D0194D8653C4913D1BD3F08F67BE72EB15C0D6676BC7BF704
DF1DCB040807CE83F3D2B97D63113708F7C170B96F9BC626B715C4F3089080C7
792877BFE81CE97510F3CDD1171761DF9617B7A5253F0E444169F4FDEE3B4CB8
DB18E6453C6DC92623636FCA65A01F288EDEEDB512EE47A82D0972666B839919
8F9C3EC2EFC37194EE6D41B7EF1D62E6609E986623938CBC3C065F53F6F91CC4
4FE2DE4BA5D7224CE782B0E390C76CC1C818F374196B2FC639BC6F2DA5FD232F
FC015D5569FF
}
end
object ApplicationProperties: TApplicationProperties
OnIdle = ApplicationPropertiesIdle
Left = 496
Top = 240
end end
end end

View File

@ -6,7 +6,7 @@ interface
uses uses
Classes, SysUtils, TASources, TASeries, TAGraph, CheckLst, Spin, Classes, SysUtils, TASources, TASeries, TAGraph, CheckLst, Spin,
ExtCtrls, StdCtrls, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
TAChartListbox, TACustomSeries, TALegend; TAChartListbox, TACustomSeries, TALegend;
type type
@ -14,6 +14,7 @@ type
{ TForm1 } { TForm1 }
TForm1 = class(TForm) TForm1 = class(TForm)
ApplicationProperties: TApplicationProperties;
Bevel1: TBevel; Bevel1: TBevel;
BtnAddSeries: TButton; BtnAddSeries: TButton;
BtnDeleteSeries: TButton; BtnDeleteSeries: TButton;
@ -26,24 +27,34 @@ type
CbShowSeriesIcon: TCheckBox; CbShowSeriesIcon: TCheckBox;
CbCheckStyle: TCheckBox; CbCheckStyle: TCheckBox;
CbKeepSeriesOut: TCheckBox; CbKeepSeriesOut: TCheckBox;
ExpSeries: TLineSeries;
ChartListbox: TChartListbox; ChartListbox: TChartListbox;
ColorDialog: TColorDialog; ColorDialog: TColorDialog;
ImageList: TImageList;
Label1: TLabel; Label1: TLabel;
Label2: TLabel; Label2: TLabel;
Memo: TMemo; Memo: TMemo;
Panel2: TPanel;
SinSeries: TLineSeries; SinSeries: TLineSeries;
CosSeries: TLineSeries; CosSeries: TLineSeries;
ListboxPanel: TPanel; ListboxPanel: TPanel;
Panel1: TPanel; Panel1: TPanel;
RandomChartSource: TRandomChartSource; RandomChartSource: TRandomChartSource;
EdColumns: TSpinEdit; EdColumns: TSpinEdit;
BtnUp: TSpeedButton;
BtnDown: TSpeedButton;
BtnSort: TSpeedButton;
Splitter: TSplitter; Splitter: TSplitter;
procedure ApplicationPropertiesIdle(Sender: TObject; var Done: Boolean);
procedure BtnAddSeriesClick(Sender: TObject); procedure BtnAddSeriesClick(Sender: TObject);
procedure BtnDeleteSeriesClick(Sender: TObject); procedure BtnDeleteSeriesClick(Sender: TObject);
procedure BtnDownClick(Sender: TObject);
procedure BtnSortClick(Sender: TObject);
procedure BtnToggleCOSClick(Sender: TObject); procedure BtnToggleCOSClick(Sender: TObject);
procedure BtnToggleChartClick(Sender: TObject); procedure BtnToggleChartClick(Sender: TObject);
procedure BtnToggleSINClick(Sender: TObject); procedure BtnToggleSINClick(Sender: TObject);
procedure BtnAddPointClick(Sender: TObject); procedure BtnAddPointClick(Sender: TObject);
procedure BtnUpClick(Sender: TObject);
procedure CbShowCheckboxesChange(Sender: TObject); procedure CbShowCheckboxesChange(Sender: TObject);
procedure CbShowSeriesIconChange(Sender: TObject); procedure CbShowSeriesIconChange(Sender: TObject);
procedure CbCheckStyleChange(Sender: TObject); procedure CbCheckStyleChange(Sender: TObject);
@ -87,6 +98,7 @@ begin
x := mn + (mx - mn) / (n - 1) * i; x := mn + (mx - mn) / (n - 1) * i;
SinSeries.AddXY(x, sin(x)); SinSeries.AddXY(x, sin(x));
CosSeries.AddXY(x, cos(x)); CosSeries.AddXY(x, cos(x));
ExpSeries.AddXY(x, exp(-x));
end; end;
end; end;
@ -143,6 +155,64 @@ begin
SinSeries.Add(Random(5), '', clRed); SinSeries.Add(Random(5), '', clRed);
end; end;
procedure TForm1.BtnDownClick(Sender: TObject);
var
indx: Integer;
ser: TBasicChartSeries;
begin
indx := ChartListbox.ItemIndex;
if (indx > -1) and (indx < ChartListbox.SeriesCount-1) then
begin
ChartListbox.Chart := nil;
ser := ChartListbox.Series[indx];
ser.Index := indx + 1;
ChartListbox.Chart := Chart;
ChartListbox.ItemIndex := indx + 1;
end;
end;
procedure TForm1.BtnSortClick(Sender: TObject);
var
List: TStringList;
i: Integer;
ser: TCustomChartSeries;
begin
List := TStringList.Create;
try
for i:=0 to ChartListbox.SeriesCount-1 do
begin
ser := ChartListbox.Series[i];
List.AddObject(ChartListbox.Series[i].Title, ser);
end;
List.Sort;
ChartListbox.Chart := nil;
for i := 0 to List.Count-1 do
begin
ser := TCustomChartSeries(List.Objects[i]);
ser.Index := i;
end;
ChartListbox.Chart := Chart;
finally
List.Free;
end;
end;
procedure TForm1.BtnUpClick(Sender: TObject);
var
indx: Integer;
ser: TBasicChartSeries;
begin
indx := ChartListbox.ItemIndex;
if indx > 0 then
begin
ChartListbox.Chart := nil;
ser := Chartlistbox.Series[indx];
ser.Index := indx - 1;
ChartListbox.Chart := Chart;
ChartListbox.ItemIndex := indx - 1;
end;
end;
procedure TForm1.CbShowCheckboxesChange(Sender: TObject); procedure TForm1.CbShowCheckboxesChange(Sender: TObject);
begin begin
with ChartListbox do with ChartListbox do
@ -210,6 +280,12 @@ begin
Chart.AddSeries(ser); Chart.AddSeries(ser);
end; end;
procedure TForm1.ApplicationPropertiesIdle(Sender: TObject; var Done: Boolean);
begin
BtnUp.Enabled := ChartListbox.ItemIndex > 0;
BtnDown.Enabled := (ChartListbox.ItemIndex > -1) and (ChartListbox.ItemIndex < ChartListbox.SeriesCount-1);
end;
procedure TForm1.BtnDeleteSeriesClick(Sender: TObject); procedure TForm1.BtnDeleteSeriesClick(Sender: TObject);
begin begin
if ChartListbox.ItemIndex = -1 then if ChartListbox.ItemIndex = -1 then