如何在delphi运行时将charteries添加到dbchart答案

您所在的位置:网站首页 fieldbyname 如何在delphi运行时将charteries添加到dbchart答案

如何在delphi运行时将charteries添加到dbchart答案

2023-04-04 02:00| 来源: 网络整理| 查看: 265

我需要在运行时添加图表系列,因为我不知道在设计时我会有多少图表系列,所以我编写了一些代码来添加它。但是由于某种原因它不起作用...

我的大多数图表只需要 1 个图表系列,除了 1 需要 2 个图表。所以我可以添加一个带有 2 个图表系列的额外表格,但这会与我的设计相冲突展示。所以现在,我在设计时有 1 个图表系列 + 在运行时有额外的 1 个。在设计模式中添加的图表系列完美运行。我在运行时添加的几乎是表单文件 (.dfm) 中图表属性的精确副本。

表格后面:

object frmChartTest: TfrmChartTest Left = 0 Top = 0 Caption = 'Test' ClientHeight = 299 ClientWidth = 635 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 object chtTestChart: TDBChart Left = 0 Top = 0 Width = 635 Height = 299 Title.Text.Strings = ( 'Title Chart') BottomAxis.DateTimeFormat = 'dd/MM/yyyy' BottomAxis.Increment = 1.000000000000000000 BottomAxis.LabelStyle = talValue BottomAxis.Title.Caption = 'Title bottom axe' LeftAxis.Automatic = False LeftAxis.AutomaticMaximum = False LeftAxis.AutomaticMinimum = False LeftAxis.ExactDateTime = False LeftAxis.Maximum = 100.000000000000000000 LeftAxis.Title.Caption = 'Title Y-ax' Legend.Visible = False View3D = False View3DOptions.Elevation = 344 Zoom.Pen.Mode = pmNotXor Align = alClient BevelOuter = bvNone Color = clWhite TabOrder = 0 DefaultCanvas = 'TGDIPlusCanvas' ColorPaletteIndex = 13 end end

实际代码:

unit ChartTest; interface uses Data.DB, FireDAC.Comp.Client, Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, System.DateUtils, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, VclTee.TeeGDIPlus, VclTee.TeEngine, Vcl.ExtCtrls, VclTee.TeeProcs, VclTee.Chart, VclTee.DBChart; type TfrmChartTest = class(TForm) chtTestChart: TDBChart; procedure FormShow(Sender: TObject); private procedure CreateField(MemoryDataSet: TFDMemTable; AFieldName: string; AFieldType: TFieldType; ASize: integer); procedure AddValues(FieldNameXAxe, FieldNameYAxe: string; LineColor: TColor); function GetData(): TFDMemTable; end; var frmChartTest: TfrmChartTest; implementation {$R *.dfm} const dateField: string = 'date1'; intField1: string = 'int1'; intField2: string = 'int2'; { TfrmChartTest } procedure TfrmChartTest.AddValues(FieldNameXAxe, FieldNameYAxe: string; LineColor: TColor); var chartSeries: TChartSeries; begin chartSeries := TChartSeries.Create(chtTestChart); with chartSeries do begin ParentChart := chtTestChart; Marks.Style := smsXValue; DataSource := GetData(); SeriesColor := LineColor; XLabelsSource := FieldNameXAxe; Pen.Color := LineColor; Pen.Width := 3; XValues.DateTime := True; XValues.Name := 'X'; XValues.Order := loAscending; XValues.ValueSource := FieldNameXAxe; YValues.Name := 'Y'; YValues.Order := loNone; YValues.ValueSource := FieldNameYAxe; DrawBetweenPoints := True; end; chtTestChart.AddSeries(chartSeries); chartSeries.Active := True; end; procedure TfrmChartTest.CreateField(MemoryDataSet: TFDMemTable; AFieldName: string; AFieldType: TFieldType; ASize: integer); begin with MemoryDataSet.FieldDefs.AddFieldDef do begin name := AFieldName; DataType := AFieldType; if ASize > 0 then begin Size := ASize; end; end; end; procedure TfrmChartTest.FormShow(Sender: TObject); begin AddValues(dateField, intField1, clRed); AddValues(dateField, intField2, clBlue); chtTestChart.LeftAxis.Minimum := 45; chtTestChart.LeftAxis.Maximum := 175; end; function TfrmChartTest.GetData: TFDMemTable; var Data: TFDMemTable; begin Data := TFDMemTable.Create(nil); CreateField(Data, dateField, ftDate, 0); CreateField(Data, intField1, ftInteger, 0); CreateField(Data, intField2, ftInteger, 0); Data.CreateDataSet(); Data.Append(); Data.FieldByName(dateField).AsDateTime := Yesterday; Data.FieldByName(intField1).AsInteger := 50; Data.FieldByName(intField2).AsInteger := 130; Data.Append(); Data.FieldByName(dateField).AsDateTime := Today; Data.FieldByName(intField1).AsInteger := 70; Data.FieldByName(intField2).AsInteger := 150; Data.Append(); Data.FieldByName(dateField).AsDateTime := Tomorrow; Data.FieldByName(intField1).AsInteger := 90; Data.FieldByName(intField2).AsInteger := 170; Exit(Data); end; end.

不显示 Y 轴的值。显示 X 轴上的值。 没有显示错误消息,只是没有按预期工作。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3