quickreportの実行時作成について

解決


サンプー  2008-11-20 17:48:56  No: 32658

D6Pro、XPProSP3、付属のquickreportです
フォームにQuickRepを貼り付けた後、Detailbandを作成したり、QRLabelを作成したりは、出来きたのですが、QuickRepそのものを実行時に作成する方法があるのでしょうか?
また、QuickRepのPage.OrientationとPage.PaperSIzeプロパティをプログラム上変更するにはどうすれば良いのでしょうか?
以上2点、よろしくお願いします


???  2008-11-20 18:01:50  No: 32659

> QuickRepそのものを実行時に作成する方法があるのでしょうか?
QRLabelとかと同じ
フォーム上の見えない位置にでも貼りつけてやればいいんじゃない?
所詮、TWinControlから派生したコントロールだし、特別なことは不要かと。

> QuickRepのPage.OrientationとPage.PaperSIzeプロパティ〜
そのまんま、QuickRep.Page.Orientation := poPortrait;
QuickRep.Page.PaperSIze := A3;
これ、できなかったの?


サンプー  2008-11-21 00:19:48  No: 32660

>そのまんま、QuickRep.Page.Orientation := poPortrait;
未定義の識別子'PoPortRait'と表示されます
use節にQRPrntrを追加するとコンパイルが通ります
>QuickRep.Page.PaperSIze := A3;
未定義の識別子'PoPortRait'と表示されます
use節にPrintersを追加するとコンパイルが通ります

現在の試験的なコードは以下の通りです
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,QuickRpt, QRCtrls;

type
  TFrmTest = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private 宣言 }
    Report : TQuickRep;
    Detail : TQRBand;
   // QLblName : TQRLabel;
  public

    { Public 宣言 }
  end;

var
  FrmTest: TFrmTest;

implementation

{$R *.dfm}

procedure TFrmTest.FormCreate(Sender: TObject);
begin
 Report := TQuickRep.Create(FrmTest);
 with Report do begin
   Parent := FrmTest;
   Page.PaperSize := A4;;//ここでエラー
   Page.Orientation := poLandScape;//ここでエラー
   Page.LeftMargin := 10;
   page.TopMargin := 10;
   Page.RightMargin := 10;
   Page.BottomMargin := 10;
   Top := 0;
   Left := 0;
 end;

 Detail := TQRBand.Create(FrmTest);
 with Detail do begin
  Parent := FrmTest.Report;
  Size.Height := Report.Height-Report.Page.TopMargin-Report.Page.BottomMargin;
  Size.Width := Report.Width - Report.Page.LeftMargin-Report.Page.RightMargin;
 end;
 Report.PreviewModal;
end;

procedure TFrmTest.FormDestroy(Sender: TObject);
begin
 Detail.Free;
 Report.Free;
end;


サンプー  2008-11-21 00:21:48  No: 32661

前後しましたが???さんレスありがとうござした


ofZ  2008-11-21 06:47:37  No: 32662

> Report := TQuickRep.Create(FrmTest);
FrmTestなどという変数使わず、Selfで十分

> Detail := TQRBand.Create(FrmTest);
Detail := Report.CreateBand(rbDetail)
とか、
Report.Bands.HasDetail := True;
Detail := Report.BandList.Items[0];

とかでも、できないかな?

めんどくさいから、ひな形の一つもつくって、そこからコントロールの
増減ぐらいだけ、コードで書いた方がいいような気もするけど・・・。


サンプー  2008-11-21 17:44:47  No: 32663

ofZさんレス有難うございます
>めんどくさいから、ひな形の一つもつくって、そこからコントロールの
増減ぐらいだけ、コードで書いた方がいいような気もするけど・・・。
やっぱり、この方法が一番早いのでしょうか??


ofZ  2008-11-21 21:14:08  No: 32664

> やっぱり、この方法が一番早いのでしょうか??
どんな帳票にしたいかにもよるけど、
1)文字サイズ固定でいい
2)一行一レコードである
であるならば、TQRMemoを大きく貼り付けして、整形した行データを一括で
流し込むだけで済むので、コントロールの増減すら不要になりますよね。
TQREdit一個で、一行分のデータを、OnNeedDataで整形出力してもいいでしょう。

直接の回答ではありませんが、ソースの可読性に問題がないのであれば
(帳票数が少ない等、条件分岐が少ないとか)、全部コードで記述しても
いいと思います。
自分は、レイアウトをイメージながら作れないので、できるかぎり
フォームに貼り付けして使います。


サンプー  2008-11-22 03:23:04  No: 32665

ofZさんありがとうございます
動的な作成を試みたのですが、ofZさんの指摘の方法でやります
とりあえず、本件に関しては、解決とします
ただ、疑問に残るのは、QRPrntr,PrinterをUse節に入れないと、orientationプロパティーやPaperSizeプロパティーを変更できない点です。この点については、私なりに調査して、理解できたら報告します


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加