在 FastReport 5 中调整对象 Positions/Dimensions

Adjust Object Positions/Dimensions in FastReport 5

我需要在生成报告时移动一些备忘录对象并调整带区的高度。我在脚本中添加了以下内容:

procedure MasterDataOnBeforePrint(Sender: TfrxComponent);
begin
  if (DRID = <TRAN_DETAIL."REFERENCEID">) then
  begin
    txChargeDate.Top := 0;
    txChargeDesc.Top := 0;
    txChargeQuant.Top := 0;
    txChargeAmt.Top := 0;

    txDRInfo.Visible := false;
    txDRDesc.Visible := false;

    MasterData.Height := 0.25;
  end
  else
  begin
    MasterData.Height := 0.65;

    txChargeDate.Top := 0.4;
    txChargeDesc.Top := 0.4;
    txChargeQuant.Top := 0.4;
    txChargeAmt.Top := 0.4;

    txDRInfo.Visible := true;
    txDRDesc.Visible := true;
  end;
  DRID := <TRAN_DETAIL."REFERENCEID">;
end;

基本上,如果当前行项目与前一个行项目具有相同的 ReferenceID,那么我不想打印 txDRInfo 和 txDRDesc。我也不希望大 space 出现在他们本来应该出现的地方。因此,我检查参考 ID 是否已更改并四处移动项目并隐藏不打印的文本。

问题是虽然这是在 BeforePrint 事件中,但我对位置或大小所做的任何更改都会影响所有行项目,而不仅仅是事件正在查看的行项目。

有没有办法使用 Delphi 2007 和 FastReport VCL 5 解决这个问题?

我想出了一个更好的方法来做到这一点。我发现,如果 child 带不可见,您仍然可以打印任何 children。因此,我将所有内容从主数据带中取出,并将它们移动到 2 child 个带中:

Master Band (Height = 0)
  Child Band 1 with stuff to hide; PrintChildIfInvisible = true
    Child Band 2 with stuff to always show

然后在 Child Band 1 的打印前我只是检查它是否应该被隐藏起来。