Search Results for

    Show / Hide Table of Contents

    Engine オブジェクトの使用

    Engine オブジェクトが、レポートの構築を管理するレポートのエンジンを表すということは、既に述べました。ページ上にバンドを配置する処理は、エンジンのプロパティおよびメソッドを使用することにより管理できます。まず、いくつかの理論があります。

    下図は、レポート ページのさまざまなサイズを示しています。

    ページの物理的なサイズは、PaperWidth プロパティと PaperHeight プロパティです。これらは、ページが選択されているときにオブジェクト インスペクターで見ることができます。したがって、A4 用紙のサイズは 210 x 297 mm になります。

    PageWidth および PageHeight は印刷可能な領域の大きさであり、通常、用紙の物理的サイズよりも小さくなります。印刷可能領域のサイズは、レポート ページのプロパティの LeftMargin、TopMargin、RightMargin、および BottomMargin によって決まります。印刷可能領域のピクセル単位のサイズは、Engine.PageWidth および Engine.PageHeight 関数によって返されます。

    最後に、FreeSpace はページ上の空き領域の高さです。ページ上に "ページ フッター" バンドがある場合は、FreeSpace を計算する際にその高さが考慮されます。この高さは、Engine.FreeSpace 関数によってピクセル単位で返されます。

    次のバンドを表示した後にページ上の空き領域が減り、そのことが FreeSpace を計算する際に考慮されるということに留意してください。

    レポート ページはどのように構築されるのでしょうか?FastReport のコアは、十分な空き領域がある限りページにバンドを表示します。残りの空き領域がなくなると、ページ フッター バンドが出力され(必要な場合)、新しい空のページが作成されます。

    既に述べたように、次のバンドを表示した後、空き領域の高さは減ります。さらに、次のバンドの表示は、X 軸と Y 軸の座標によって定義される現在の位置から開始されます。

    現在の位置は、それぞれ Engine.CurX プロパティと Engine.CurY プロパティによって返されます。

    次のバンドの出力後、その出力されたバンドの高さが自動的に CurY へ加算されます。新しいページが作成された後、CurY は 0 になります。CurX は、複数列レポートを出力するときに変更されます。

    Engine.CurX および Engine.CurY は、取得だけでなく設定にも使用できます。つまり、これらの値を増減することで、バンドを移動させることができるということです。たとえば、次のようなレポートがあるとします。

    次のように出力することができます。

    これは、バンドの OnBeforePrint イベントにハンドラーを記述することによって実現されます。

    Pascal スクリプト:

    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
      Engine.CurX := Engine.CurX + 5;
    end;
    

    C++ スクリプト:

    void MasterData1OnBeforePrint(TfrxComponent Sender)
    {
      Engine.CurX = Engine.CurX + 5;
    }
    

    CurY を変更すると、たとえば次のように、バンドを重なり合った状態にすることができます。

    次のスクリプトによって実現されます。

    Pascal スクリプト:

    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
      Engine.CurY := Engine.CurY - 15;
    end;
    

    C++ スクリプト:

    void MasterData1OnBeforePrint(TfrxComponent Sender)
    {
      Engine.CurY = Engine.CurY - 15;
    }
    

    Engine.NewPage メソッドは、レポート内の任意の必要な場所に改ページを挿入し、その後、新しい出力ページの先頭から出力を続行します。この例では、2 番目のレコードを出力した後に改ページを挿入します。

    Pascal スクリプト:

    procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
    begin
      if <Line> = 2 then
        Engine.NewPage;
    end;
    

    C++ スクリプト:

    void MasterData1OnAfterPrint(TfrxComponent Sender)
    {
      if (<Line> == 2)
        Engine.NewPage();
    }
    

    ここで留意すべき点は、OnAfterPrint イベントを使用したことです(つまり、バンドが出力された後です)。また、Line システム変数はレコードの連続番号を返すという点に注目してください。

    Engine.NewColumn メソッドは、複数列レポートに段区切りを挿入します。ページ上に空いている列がなくなると、新しいページが作成されます。

    Back to top © Copyright Fast Reports Inc.