おかげさまで、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;
ともに解放されているを考えていいんでしょうか?
> Form2.QuickRep1.Bands.TitleBand.Destroy;//手法1
普通は、Destroyではなく、Freeを使います。
> アプリケーションで直接デストラクタを呼び出さないでください。かわりに,Free メソッドを呼び出します。
と、Helpにも書かれてるはずです。
ちなみに、Freeしてしまえば、HasTitleBand := False; しなくても
HasTitleBand = False になっているはずです。
> 〜Band.Destroy
> Has〜Band := False;
> ともに解放されているを考えていいんでしょうか?
設計時に貼り付けたラベルなら、開放済みです。
HasTitle := True にしたところで、フォームのデザインを読み直しているわではありませんので、ラベルがないのは当然です。
「覆水盆に返らず」
ありがとうございます。
あんまりPascalの定説わかってなくて…
ツイート | ![]() |