我想请教这方面的技术,如果有请留字,另外开贴给分!

解决方案 »

  1.   

    这个双休日正好试了一下在WebSnap中生成TeeChart图表,最终可以在网页中显示图表,当然还有一点小问题没解决,稍后再说。    先说一说利用TeeChart组件生成图表的原理:
        1、通过程序生成一个FChart对象;
        2、通过Chart对象的TeeCreateBitmap函数生成BMP图片,再把BMP图片转化为JPEG图片,把JPEG图片生成为Stream流;
       3、在Adapter的AdapterImageField字段的OnGetImage事件中把生成的流赋给Image。   代码如下:
      1:
      FForm := TForm.CreateNew(nil);
      FForm.SetBounds(0, 0, 10, 10);
      FChart := CreateChart(self);
      FChart.Parent := FForm;
      注意:一定要给FChart的Parent赋值,不然不能生成图片。  2:第二步可以做成一个函数:
    function TPageProducerPage3.GetChartJPEGStream: TMemoryStream;
    var
      jpeg: TJPEGImage;
      bmp: TBitmap;
    begin
      Result := TMemoryStream.Create;
      jpeg := TJPEGImage.Create;
      try
        bmp := Chart.TeeCreateBitmap(clDefault, Chart.GetRectangle);
        try
          jpeg.Assign(bmp);
          jpeg.SaveToStream(result);
        finally
          bmp.Free;
        end;
      finally
        jpeg.Free;
      end;
    end;    3:AdapterImageField字段的OnGetImage事件如下:    
    procedure TPageProducerPage3.AdapterImageField1GetImage(Sender: TObject;
      Params: TStrings; var MimeType: String; var Image: TStream;
      var Owned: Boolean);
    begin
      Image := GetChartJPEGStream;
    end;  一点问题:
      当FChart对象被释放时,出现异常"Invalid window handle",释放代码如下:
      FChart.Free;
      FChart := nil;
      FForm.Free;
      FForm := nil;
      希望有哪位能够解决。