【问题标题】:Report Builder Positioning Controls at Runtime报表生成器在运行时定位控件
【发布时间】:2016-07-26 15:58:35
【问题描述】:

我正在使用带有 ReportBuilder 10.04 的 Delphi 2010,并且有一个非常基本的报告,其中包含 1 个详细信息带,其中包含 2 个 TppDBText 组件(一个带有粗体文本,另一个是非粗体)。正如预期的那样,两者都在设计时定义的指定位置打印在报告上。我需要做的是将控件重新定位到尽可能靠近另一个控件的文本末尾(包含不同的文本长度)的右侧。关于如何实现这一点的任何想法?

【问题讨论】:

  • 你试过设置左边组件的AfterPrint事件吗?也许它的宽度会根据它得到的文本来设置,然后你就可以把组件正确地放在右边了。
  • 是的,我试过了,但这没有用。第一个控件的所有宽度都设置为相同。
  • 是的,我就是这么想的。我试过几次,但从来没有做对。对于垂直定位,有ShiftRelativeTo,但与水平定位没有任何相似之处。也许使用富文本控件并在设置文本后对其进行格式化?

标签: delphi report reportbuilder


【解决方案1】:

首先,为使本示例正常工作,请将 TppReport 的“Units”属性设置为“utScreenUnits”。

我将在这里使用 City 和 State 字段作为示例,我的数据集称为“tblCustomers”。

在 DetailBand 的 BeforePrint 属性中添加以下代码:

// ppCity is a tppDBText report control
// ppState is a tppDBText report control

ppCity.Width := length(tblCustomersCity.asstring) * 10; //adjust 10 based on font size
ppState.left := ppCity.Left + ppCity.Width + 10; // adjust 10 based on font size

您也可以对计算字段执行此操作,但由于您的第一个控件是粗体,而您的第二个控件不是粗体,因此上述内容就足够了。

要使用计算字段,只需将 City 和 State 组合成一个名为“CityState”的计算字段,然后在数据集的 OnCalcs 中执行以下操作:

tblCustomerCityState.asstring := tblCustomersCity.asstring +' '+tblCustomersState.asstring;

【讨论】:

  • 请注意,这是一个近似值,因此请使用足够大的乘数(在本例中为 10)。这最好与等宽字体结合使用。
猜你喜欢
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多