クイックレポートで特定の列の特定の行に、色を付けるには

解決


Delphi大好き  2009-05-23 07:02:40  No: 34497

前回はありがとうございました、
いつも拝見させてもらっています。

クイックレポートで、特定の列と行に、
色を付けて色分けをしたいと思っています。
あるいは、特定の列と行のフォントの色を変えるなどなど・・・

取り敢えず、一列全体になってしまいましたが、
色を変更するまでは確認できました。

procedure TForm4.Timer1Timer(Sender: TObject);
begin
  QRExpr1.Color := clred;
end;

何とかして、これを、
特定の列と行のみを色づけする事は可能でしょうか?

無理難題で恐縮ですが、
よろしくお願いしますm(__)m。


Delphi大好き  2009-05-23 07:16:44  No: 34498

環境を書き忘れました。

WinXP SP3 Delphi3.1Pro
QuickReport 2.0
です。


かず  2009-05-23 07:20:52  No: 34499

QuickReportに行と列という概念はありません。
特定のBandに機能を与えるだけです。
ですからTQRShape文字の下において、BeforePrintで色を変えたらどうでしょうか。


かず  2009-05-23 07:22:02  No: 34500

TQRShape文字-->TQRShapeを文字


Delphi大好き  2009-05-23 10:01:36  No: 34501

かずさん早速のアドバイスありがとうございます。

列と行の概念は無いのですか・・・
実現にはきびしそうですね・・・;

以下で試したところ、一行目のみが色が変わらないのを確認しました^^。

procedure TForm4.DetailBand1AfterPrint(Sender: TQRCustomBand;
  BandPrinted: Boolean);
begin
  QRExpr1.Color := clred;
end;

クイックレポートは使ってまだ数回で、右も左も判らない状態です。

TQRShapeは文字の下に配置しましたが、どのようなコードを追加すれば良いのでしょうか?

誤解の無いよう念のため再度目標を話すと、
例)Qレポート
  12345

2  ○

4      ○

の○の部分の色を変えたい訳です^^。
可能でしょうか・・・^^;
それではよろしくお願いしますm(__)m。


HOta  2009-05-23 16:28:47  No: 34502

このコードはAfterPrintですね。かずさんが書いているように、BeforePrintにすればどうでしょうか?
何行目の場合は、変数を用意して数えて、該当行の場合に変更すれば良いでしょう。


ofZ  2009-05-23 17:14:00  No: 34503

列というのをどのように設計しているのでしょう?
TQuickRep.Page.Columns を変更して、複数列にしているのか、
TQREditをDetailbandの横に並べて複数列のように見せているのか。

まぁ、DetailBand.BeforePrintで、値を見ながら色を変更するしかないと思うけど。


Delphi大好き  2009-05-23 23:16:24  No: 34504

HOtaさん、ofZさん、ありがとうございます。
確かに間違ってますね、
こちらの入力間違いです^^;

変数などでDetailBand.BeforePrintからカウントすれば何とかなるのですね。
何とか頑張ってみます、ありがとうございます。

設計ですが、
レポートはウィザードで自動で作りました。

配置は、
TitleBand1、
ColumnHeaderBand1、
DetailBand1、
PageFooterBand1、

の順で配置しています。

ウィザードで自動で作ったので、
QRExprがDetailband上に横に配置されています。

色々試しながら頑張ってみます。
判らない事があったらまた書き込みにきます^^。


Delphi大好き  2009-05-24 01:19:04  No: 34505

ありがとうございます、
イメージ通り出来ました!

助かりました、何とかなりそうですm(__)m。

試しのサンプル状態ですが、
ピンポイントで色を変更できるのを確認しました。
後は作り込んでくだけです^^。

以下は試し段階のコードです。

procedure TForm4.DetailBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  with datamodule2 do begin
    Table1.Locate('NO','11',[]);
    
    count1 := count1 + 1;
    QRExpr2.Color := clWhite;
    if count1 = Table1.FieldByName('NO').asinteger then begin
      QRExpr1.Color := clred;
    end;
  end;
end;

大変助かりました。
本当にありがとうございました。


Delphi大好き 追伸-  2009-05-24 03:31:30  No: 34506

機能の実装が終わりました。
一日で実装が完了出来て感謝しています。

改めてありがとうございましたm(__)m。


Delphi大好き  2009-06-06 07:20:37  No: 34507

自己レスです。
その後色々改良して、以下で簡単に出来ました。
改めてありがとうございました。

procedure TForm4.DetailBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  with Query1 do begin
    QRExpr2.Color := clWhite;
    if FieldByName('物件名フラグ{String型}').asstring = 'True' then
      QRExpr2.Color := clYellow;

    {各QRExprごとに上記の繰り返し}
  end;
end;


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

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






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