是什么导致饼图出现“挤压”?

时间:2014-04-17 22:24:22

标签: delphi teechart

我有一个用TeeChart创建的饼图,它在我开发的系统上看起来很好,但是当我在另一台机器上运行它时,"馅饼"所有都被压成椭圆形,而不是圆形。

我确保Circled上的TPieSeries属性(应该确保所绘制的内容始终是圆形,而不是椭圆形)设置为True并且不会在任何地方改变。

我检查过以确保这不是具有不同屏幕分辨率的工件。不是;另一个系统与我的开发盒的分辨率相同。

另一个系统关闭了Aero。我通过在我的开发盒上关闭Aero测试了一些东西,并且图表没有被压扁。

此时我基本上没有想法。有谁知道什么会导致饼图设置Circled = true绘制为椭圆形而不是圆形?

好: Good pie chart 错误: Bad pie chart

这是完全相同的程序,在两台不同的计算机上以完全相同的屏幕分辨率处理完全相同的数据。

编辑:正如评论中所讨论的,我对此进行了测试,发现两个系统不仅具有相同的分辨率,而且具有相同的DPI。

1 个答案:

答案 0 :(得分:7)

经过一系列的调试和深入研究后,事实证明这是因为TeeChart代码使用HORIZSIZE和VERTSIZE参数调用GetDeviceCaps,以确定屏幕上像素的物理大小并调整圆的边界矩形因此。不幸的是,this call is only valid on a printer, and not on a display device, and it has known issues on Windows 7,这两个系统都使用了这个系统。我已经向Steema报告了这个问题。希望他们可以修复它。

更新:得到了Steema的回复,他们在回复中承认了问题并提供了解决方法。如果其他人遇到问题,请将其复制到此处:

  

允许您解决问题的另一种方法是使用Chart矩形的高度来自定义Pie Radius,以控制所需的尺寸。

     

例如:

procedure TForm9.Button1Click(Sender: TObject);
var cHeight : Integer;
begin
  cHeight := Round((Chart1.ClientRect.Bottom -  Chart1.ClientRect.Top) * 0.80); //80%

  series1.CustomXRadius := cHeight div 2;
  series1.CustomYRadius := series1.CustomXRadius;
end;