diff --git a/components/tachart/demo/listbox/Unit1.lfm b/components/tachart/demo/listbox/Unit1.lfm index 03f282acf8..1429344ace 100644 --- a/components/tachart/demo/listbox/Unit1.lfm +++ b/components/tachart/demo/listbox/Unit1.lfm @@ -68,6 +68,10 @@ object Form1: TForm1 Title = 'cos(x)' LinePen.Color = clBlue end + object ExpSeries: TLineSeries + Title = 'exp(-x)' + LinePen.Color = clGreen + end end object ListboxPanel: TPanel Left = 754 @@ -80,8 +84,10 @@ object Form1: TForm1 ClientWidth = 138 TabOrder = 1 object ChartListbox: TChartListbox + AnchorSideBottom.Control = Panel2 Left = 6 - Height = 407 + Height = 379 + Hint = 'Move up' Top = 6 Width = 126 Chart = Chart @@ -90,11 +96,65 @@ object Form1: TForm1 OnItemClick = ChartListboxItemClick OnPopulate = ChartListboxPopulate OnSeriesIconDblClick = ChartListboxSeriesIconDblClick - Align = alClient + Anchors = [akTop, akLeft, akBottom] BorderSpacing.Around = 6 ItemHeight = 20 TabOrder = 0 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 object Splitter: TSplitter Left = 749 @@ -382,6 +442,106 @@ object Form1: TForm1 'ColorT=A4A0A0' ) 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 diff --git a/components/tachart/demo/listbox/Unit1.pas b/components/tachart/demo/listbox/Unit1.pas index f1f5872d75..06c46706f2 100644 --- a/components/tachart/demo/listbox/Unit1.pas +++ b/components/tachart/demo/listbox/Unit1.pas @@ -6,7 +6,7 @@ interface uses 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; type @@ -14,6 +14,7 @@ type { TForm1 } TForm1 = class(TForm) + ApplicationProperties: TApplicationProperties; Bevel1: TBevel; BtnAddSeries: TButton; BtnDeleteSeries: TButton; @@ -26,24 +27,34 @@ type CbShowSeriesIcon: TCheckBox; CbCheckStyle: TCheckBox; CbKeepSeriesOut: TCheckBox; + ExpSeries: TLineSeries; ChartListbox: TChartListbox; ColorDialog: TColorDialog; + ImageList: TImageList; Label1: TLabel; Label2: TLabel; Memo: TMemo; + Panel2: TPanel; SinSeries: TLineSeries; CosSeries: TLineSeries; ListboxPanel: TPanel; Panel1: TPanel; RandomChartSource: TRandomChartSource; EdColumns: TSpinEdit; + BtnUp: TSpeedButton; + BtnDown: TSpeedButton; + BtnSort: TSpeedButton; Splitter: TSplitter; + procedure ApplicationPropertiesIdle(Sender: TObject; var Done: Boolean); procedure BtnAddSeriesClick(Sender: TObject); procedure BtnDeleteSeriesClick(Sender: TObject); + procedure BtnDownClick(Sender: TObject); + procedure BtnSortClick(Sender: TObject); procedure BtnToggleCOSClick(Sender: TObject); procedure BtnToggleChartClick(Sender: TObject); procedure BtnToggleSINClick(Sender: TObject); procedure BtnAddPointClick(Sender: TObject); + procedure BtnUpClick(Sender: TObject); procedure CbShowCheckboxesChange(Sender: TObject); procedure CbShowSeriesIconChange(Sender: TObject); procedure CbCheckStyleChange(Sender: TObject); @@ -87,6 +98,7 @@ begin x := mn + (mx - mn) / (n - 1) * i; SinSeries.AddXY(x, sin(x)); CosSeries.AddXY(x, cos(x)); + ExpSeries.AddXY(x, exp(-x)); end; end; @@ -143,6 +155,64 @@ begin SinSeries.Add(Random(5), '', clRed); 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); begin with ChartListbox do @@ -210,6 +280,12 @@ begin Chart.AddSeries(ser); 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); begin if ChartListbox.ItemIndex = -1 then