参照附件(附件为大福星炒股看行情的图):
问题(1):Delphi一般都是在画布上面画曲线的,但是能否在控件(比如Panel或者Listbox)等容器里面做曲线?
问题(2):左右边的云层状的图形如何制作,而且随着鼠标的移动,云层也随之变化
问题(3):附件中的柱状图形是如何清晰的显示?并且随着上面直线的拖动,柱状图的高度也随着发生变化?

解决方案 »

  1.   

    问题(1):Delphi一般都是在画布上面画曲线的,但是能否在控件(比如Panel或者Listbox)等容器里面做曲线?可以在Panel上作曲线的,下面是个Panel作图的例子:
    type
      TPanel = class(ExtCtrls.TPanel)
      public
        procedure Paint; override;
      end;  TForm1 = class(TForm)
        Panel1: TPanel;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TPanel }procedure TPanel.Paint;
    begin
      inherited;
      Canvas.Pen.Color := clRed;
      Canvas.Rectangle(10, 10, 100, 100);
    end;问题(2):左右边的云层状的图形如何制作,而且随着鼠标的移动,云层也随之变化
    问题(3):附件中的柱状图形是如何清晰的显示?并且随着上面直线的拖动,柱状图的高度也随着发生变化?云状图和柱状图都是随数据变换而变化的,当鼠标移动,改变数据时,更新云状图和柱状图所需数据就行了,问题是控制好云状图和柱状图的大小,下面是个图像灰度云状图的例子,其中FGrays是个256大小数组,改变这个数组的数据,云状图也会改变:
    procedure TForm1.GrayMapPaint(Sender: TObject);
    var
      I: Integer;
    begin
      GrayMap.Canvas.Brush.Color := clSkyBlue;
      GrayMap.Canvas.FillRect(GrayMap.ClientRect);
      GrayMap.Canvas.Pen.Color := clRed;
      GrayMap.Canvas.Brush.Style := bsClear;
      GrayMap.Canvas.Rectangle(GrayMap.ClientRect);
      for I := 0 to 255 do
      begin
        GrayMap.Canvas.Pen.Color := RGB(I, I, I);
        GrayMap.Canvas.MoveTo(I + 1, 128);
        GrayMap.Canvas.LineTo(I + 1, 128 - Round(35.0 * (Log10(FGrays[I] + 1))));
      end;
    end;
      

  2.   

    除了panel组件,你也可以用Sgraph组件中的tsp_XYPlot和Tsp_XYLine组件绘制曲线图,我这儿有这个组件,就是我也用的不熟。