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

Mas*_*ler 6 delphi teechart

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

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

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

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

在这一点上,我基本上没有想法.有谁知道什么可以导致饼图被设置Circled = true为绘制为椭圆形而不是圆形?

好: 好的饼图 坏: 坏饼图

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

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

Mas*_*ler 7

一堆调试和挖掘到这个问题后,事实证明,这种情况正在发生,因为拥有TeeChart代码调用带有HORIZSIZE和VERTSIZE参数GetDeviceCaps,以确定屏幕上的像素的物理尺寸和调节圈的边界RECT相应.遗憾的是,此调用仅在打印机上有效,而不在显示设备上有效,并且在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;
Run Code Online (Sandbox Code Playgroud)