【问题标题】:What can cause a pie chart to come out "squished"?什么会导致饼图“压扁”?
【发布时间】:2014-06-02 09:28:06
【问题描述】:

我有一个用 TeeChart 创建的饼图,在我开发的系统上看起来还不错,但是当我在另一台机器上运行它时,“饼图”出来后全部变成椭圆形而不是圆形.

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

我检查以确保这不是不同屏幕分辨率的产物。它不是;另一个系统的分辨率与我的开发盒相同。

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

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

好: 坏:

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

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

【问题讨论】:

  • 我会检查另一台计算机会为 LOGPIXELSX / LOGPIXELSY 报告什么。
  • @SertacAkyuz:这些是在 Windows.pas 中定义的常量。当这些是在编译时固定不变的常量时,另一个系统如何报告不同的值?
  • @Mason - 当然我的意思是调用 GetDeviceCaps。
  • @SertacAkyuz:刚刚用 GetDeviceCaps 测试过,两个系统都报告 96/96。
  • @Mason - 感谢您的测试。我怀疑另一台显示器上的非本地(和拉伸)分辨率(以与您的分辨率匹配)。在 Steema 代码中可能假设为方形像素,这可能解释了这个问题。

标签: delphi teechart


【解决方案1】:

经过大量调试和挖掘问题后,事实证明这是因为 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 的回复,他们在其中承认了问题并提供了解决方法。复制到这里以防其他人遇到问题:

允许您解决该问题的另一种方法是自定义饼图半径,也许使用图表矩形的高度来控制您需要的尺寸。

例如:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多