在CHART组件AfterDraw里画线 窗体大小变了,曲线变了,怎么实现让我画的线也跟着走。
MainChart.Canvas.MoveTo(87,32);//x26
MainChart.Canvas.LineTo(87,-48+MainChart.Height);或者是怎么让曲线变着 我画的线也跟着时间轴走希望大家能理解我在说什么
MainChart.Canvas.MoveTo(87,32);//x26
MainChart.Canvas.LineTo(87,-48+MainChart.Height);或者是怎么让曲线变着 我画的线也跟着时间轴走希望大家能理解我在说什么
解决方案 »
- delphi中的float型的奇怪问题?
- 请教个小问题!请给点指点!
- AVICAP32录制AVI文件的问题?
- combobox的问题,我在COMBOBOX中有一系列值了,我在输入头几个子母的话,怎样根据输入字母过滤瘦小范围???
- 函数参数问题
- 请教各位一个简单的问题(散分)
- 想跳槽,请各位参考(其他版块人气不旺,请斑竹留情)
- 如何把TADODATASET转换成IDispatch类型
- 谁能提供Delphi下SDK2000开发包
- ★★★如何实现日期(2001-1-1)-日期(2000-1-1)为360天?★★★
- 关于Delphi中多线程传递参数的简单问题
- VMware 9.0.2 里安装Ghost XP 无法启动
跟着走,无非是你自己画的线按照某种算法与某个曲线有关系,既然这样你可以增加一个曲线,曲线的值同其他曲线计算的结果相同,让chart自己画比较好。不知这样讲你是否能明白。
private
const XPos = 87;
private
FRatio : Double;procedure TForm15.FormCreate(Sender: TObject);
begin
//确定比例, 利用该比例计算X值
FRatio := XPos / cht1.Width;
end;procedure TForm15.cht1AfterDraw(Sender: TObject);
var
XLine : integer;
begin
XLine := Round(cht1.Width * FRatio);
cht1.Canvas.MoveTo(XLine, 32);
cht1.Canvas.LineTo(XLine, -48+cht1.Height);
end;
跟着走,无非是你自己画的线按照某种算法与某个曲线有关系,既然这样你可以增加一个曲线,曲线的值同其他曲线计算的结果相同,让chart自己画比较好。不知这样讲你是否能明白。
这个我明白,我也这样走过,可是走出来线有点歪,应该是时间问题,你可以试下,不是一条直线的
方法不行啊,我试过了,chart大小变了他也有变,到那时不是跟着数据变的
跟着走,无非是你自己画的线按照某种算法与某个曲线有关系,既然这样你可以增加一个曲线,曲线的值同其他曲线计算的结果相同,让chart自己画比较好。不知这样讲你是否能明白。procedure TFormTest.BitBtn3Click(Sender: TObject);
var
Series7: TLineSeries;
i: Integer;
begin
Series7 := TLineSeries.Create(MainChart);
for i := 1 to DStringGrid.RowCount -1 do begin Series7.Add(0,'',clRed);
if i = 50 then begin
Series7.Add(150,'',clRed);
end;end;MainChart.AddSeries(Series7);这个是按你的方法弄出来的,线不直
方法不行啊,我试过了,chart大小变了他也有变,到那时不是跟着数据变的上边的是计算相对位置.
要跟着时间轴走, 依据的计算数据是不一样的
procedure TForm15.cht1AfterDraw(Sender: TObject);
var
nCounter : integer;
begin
if Series1.XValues.Count < 4 then
exit; nCounter := Series1.CalcXPos(2);
cht1.Canvas.Pen.Color := clRed;
cht1.Canvas.MoveTo(nCounter, Series1.CalcYPosValue(536));
cht1.Canvas.LineTo(nCounter, Series1.CalcYPosValue(504)); nCounter := Series1.CalcXPos(3);
cht1.Canvas.Pen.Color := clGreen;
cht1.Canvas.MoveTo(nCounter, Series1.CalcYPosValue(Series1.MinYValue));
cht1.Canvas.LineTo(nCounter, Series1.CalcYPosValue(Series1.MaxYValue));end;