QRBand実験中

解決


take  2006-05-17 23:18:25  No: 21575

おかげさまで、QuickReportの動的レイアウトにめどがつきました。
マスタの単体静的印刷に使おうと思っているんですが、マスタの種類が多いのでふつうに使うとレポートが氾濫するので、QuickRepを使い回そうと思っています。
で、いちいち下位コンポーネントをフリーにするのが面倒なので、親Bandを解放して貼り付け直しを考えています。

実験は
Form1.Button1 → Form2.QuickRep.Bands.TitleBand
で可視不可視処理をします。
TitleBand上にひとつQRLabelを貼り付けておきます。
Form1.Button2でPreview実行です。

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Form2.QuickRep1.Bands.HasTitle then
  begin
    Form2.QuickRep1.Bands.TitleBand.Destroy;//手法1
    Form2.QuickRep1.Bands.HasTitleBand := False;//手法2
    Button1.Caption := '消去';
  end else
  begin
    Form2.QuickRep1.Bands.HasTitle := True;
    Button1.Caption := '表示';
    //Form2.QRLabel1.Parent := Form2.QuickRep1.Bands.TitleBand;//※
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Form2.QuickRep1.Preview;
end;

Button1をクリックせずにPreviewするとQRLabelは表示されます。
Button1を1回クリックすると手法1手法2ともにレポートの生成がされなくなります。
Button2で再度Bandを表示するとレポートは生成されますがQRLabelはありません。
※では、Parentで設定し直したら戻るかと思ったんですが、エラーが返りました。

〜Band.Destroy
Has〜Band := False;
ともに解放されているを考えていいんでしょうか?


  2006-05-18 02:59:10  No: 21576

>     Form2.QuickRep1.Bands.TitleBand.Destroy;//手法1
普通は、Destroyではなく、Freeを使います。

> アプリケーションで直接デストラクタを呼び出さないでください。かわりに,Free メソッドを呼び出します。
と、Helpにも書かれてるはずです。

ちなみに、Freeしてしまえば、HasTitleBand := False; しなくても
HasTitleBand = False になっているはずです。

> 〜Band.Destroy
> Has〜Band := False;
> ともに解放されているを考えていいんでしょうか?
設計時に貼り付けたラベルなら、開放済みです。
HasTitle := True にしたところで、フォームのデザインを読み直しているわではありませんので、ラベルがないのは当然です。
「覆水盆に返らず」


take  2006-05-19 19:46:12  No: 21577

ありがとうございます。
あんまりPascalの定説わかってなくて…


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

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






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