喫茶XRAYトップページ

[▲前のスレッド]

[165] plTackPrevでの改頁方法返信 削除
2005/3/4 (金) 14:04:41 yumapa
いつもplシリーズを愛用させて頂いておりますyumapaです。

plTackPrevで表形式のデータを描画しています。Queryから指定した
項目を表示させることは出来るのですが、項目を表示させた後の次頁に
表の金額項目の内訳や合計を表示させたい、即ち、1頁〜最終-1頁と
最終頁を別の書式で作成したいと考えています。

これまでは、同様のケースではplPrevのみを使用して項目の描画を
自前で書いていましたので、全ての項目を描画後、plPrev1.NewPage;
としてやれば、問題なく最終頁だけを表形式でない別の書式とする
ことができていました。

plTackPrevを使用する場合には、NewPageメソッドは利用できない
ようですが、何か方法はありますでしょうか。
何卒、宜しくご指導下さいm(_ _)m

[166] Re:plTackPrevでの改頁方法返信 削除
2005/3/4 (金) 22:49:15 Mr.XRAY
▼ yumapaさん
どうも久しぶりです.

> plTackPrevを使用する場合には、NewPageメソッドは利用できない
> ようですが、何か方法はありますでしょうか。


plTackPreveでは,主に各々の頁印刷開始,または終了のイベントを利用して
描画すると便利です.
例えば,OnBeforePageDraw ( Sender, DataNo, Page )
で Page=PageCount なら最終頁の開始です.
このPageという引数で処理を分けて下さい.

plTackPrevでは連続した表の印刷が苦手ですが,行の高さなどを決めれば改頁
の判断はなんとかなるのではないかと考えています.

では,よろしく.


[170] Re2:plTackPrevでの改頁方法返信 削除
2005/3/4 (金) 23:36:49 yumapa
▼ Mr.XRAYさん
いつもご指導下さりありがとうございます。

> 例えば,OnBeforePageDraw ( Sender, DataNo, Page )
> で Page=PageCount なら最終頁の開始です.


質問の仕方がマズく申し訳ありません(^^;
これは、plTackPrevで表形式の印刷を行う場合の最終頁にアクセスする
場合ですね。
私のしたいことは、表(一覧表)を描画した後、即ち、最終頁の更に後に
1頁全くスタイルの異なる頁を作成したいのです。
このようなことは可能でしょうか?

宜しくご指導下さいm(_ _)m


[171] Re3:plTackPrevでの改頁方法返信 削除
2005/3/5 (土) 01:06:19 Mr.XRAY
▼ yumapaさん
>これは、plTackPrevで表形式の印刷を行う場合の最終頁にアクセスする
>場合ですね。
> 私のしたいことは、表(一覧表)を描画した後、即ち、最終頁の更に後に
> 1頁全くスタイルの異なる頁を作成したいのです。
> このようなことは可能でしょうか?


大変失礼しました.そうですよね,そんなこと分かっている!!
とお怒りでしょう.スンマセン.

以下の様な感じでお願いします.説明は省略して... いいですよね.
状況によっては,また違う方法になるかも知れませんが...
テストプログラムの[Hagaki]で動作確認しました.
WindowsXP(S2), Delphi5です.

//====================================================================
//  データセットで決まる最終頁に更に1頁追加するコード
//====================================================================
procedure TForm1.plTackPrev1FormShow(Sender: TObject);
begin
     plTackPrev1.LabelCount:=plTackPrev1.LabelCount+1;
end;
//====================================================================
//  追加した頁にはデータを印刷しない
//  それを自動的にやってしまうとラベルの作成(自動追加)の時にこまる
//  この例はテストプログラムの[Hagaki]
//  [Hagaki]では埋め込みの画像があるのでそれをnilにする
//  また,郵便番号枠もあるのでそのDrawMethodを空にする
//====================================================================
procedure TForm1.plTackPrev1BeforeDataDraw(Sender: TObject; Rect: TRect;
  ACol: Integer; var Text: String);
begin
     if plTackPrev1.PageNumber=plTackPrev1.PageCount then begin
       plTackPrev1.Columns[0].ImagePict.Graphic:=nil;
       plTackPrev1.Columns[2].DrawMethod:='';
       Text:='';
     end;
end;
//====================================================================
//  最後の頁はデフォルトの印刷はしないので,このイベントに書ける
//  ここに頁数を増やすコードを書かないように.どんどん増えてしまいます
//====================================================================
procedure TForm1.plTackPrev1BeforePageDraw(Sneder: TObject; DataNo,
  Page: Integer);
begin
     if Page=plTackPrev1.PageCount then begin
       plTackPrev1.FontSize(30);
       plTackPrev1.Canvas.TextOut(100,100,'最終頁の次です??');
     end;
end;

[172] Re4:plTackPrevでの改頁方法返信 削除
2005/3/5 (土) 02:24:54 yumapa
▼ Mr.XRAYさん
ご面倒をお掛けしておりますm(_ _)m
 
はがき宛名印刷のテストプログラムでは、「用紙のタイプ」をstSealと
されいますが、はがき1頁をラベル1枚として設定されていると思います。
私の表は、1頁あたり10行のQueryデータを出力させるようにして
いますが、最終頁のQueryデータ数は1だったり、6だったりしますので、

> procedure TForm1.plTackPrev1FormShow(Sender: TObject);
> begin
>      plTackPrev1.LabelCount:=plTackPrev1.LabelCount+1;
> end;


としても、同様にうまくいくのでしょうか?

質問させて頂きながら誠にお恥ずかしいのですが、今手元にあるPCには
Delphi環境が入っておりませんので、試すことができません(^^;
私としては、plTackPrevのテストプログラム「表形式の印刷」のような
表を描画し、最終のQueryデータの表示されてている頁に、プラス1頁
したいと思います。
アドバイス頂ければ幸いですm(_ _)m


[173] Re5:plTackPrevでの改頁方法返信 削除
2005/3/5 (土) 11:05:28 Mr.XRAY
▼ yumapaさん
> としても、同様にうまくいくのでしょうか?

いきませんね.Labelの枚数を頁に印刷する枚数から換算する必要が
あります.

> 表を描画し、最終のQueryデータの表示されてている頁に、プラス1頁
> したいと思います。


ということで,できなくはないが結構ややこしいです.
AddPageCount(追加頁数)みたいなプロパティでも追加しますか.
それとも.... ちょっと考えてみます.

それと先程のコードですと,頁を戻すと画像が表示されなくなってしまい
ますね.画像を退避しておく必要があります.

[174] Re6:plTackPrevでの改頁方法(頁の追加)返信 削除
2005/3/5 (土) 12:48:53 Mr.XRAY
> AddPageCount(追加頁数)みたいなプロパティでも追加しますか.
> それとも.... ちょっと考えてみます.


AddPageCountとOriginPageCountプロパティを追加したバージョンをUP
しました.Version 4.18です.
追加の頁にはデータを印刷しません.
例えばテストプログラム[Table]で以下の様に使用して下さい.

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
     plTackPrev1.Title:='表形式の印刷テスト';
     plTackPrev1.AddPageCount:=3;
     plTackPrev1.Preview;
end;

procedure TForm1.plTackPrint1BeforePageDraw(Sneder: TObject; DataNo,
  Page: Integer);
var
     Str          : String;
begin
     if Page>plTackPrev1.OriginPageCount then begin
       Str:=IntToStr(Page-plTackPrev1.OriginPageCount);
       plTackPrev1.FontSize(50);
       plTackPrev1.TextOut(100,100,'追加の '+Str+'頁目です');
       exit;
     end;
     //以下略



[175] Re7:plTackPrevでの改頁方法(頁の追加)返信 削除
2005/3/5 (土) 16:03:59 yumapa
▼ Mr.XRAYさん
ご面倒掛けてスミマセン(^^;

> AddPageCountとOriginPageCountプロパティを追加したバージョンをUP
> しました.Version 4.18です.
> 追加の頁にはデータを印刷しません.


いつもリクエストに迅速なご対応を頂き、心から感謝しております。
待ち遠しいですが、月曜日に試させて頂きます。
ありがとうございましたm(_ _)m



[176] Re7:plTackPrevでの改頁方法(頁の追加)返信 削除
2005/3/5 (土) 16:09:55 Mr.XRAY
今試したらイベント内でも可能なようです.

 procedure TForm1.plTackPrint1BeforePageDraw(Sneder: TObject; DataNo,
   Page: Integer);
 var
      Str : String;
 begin
      plTackPrev1.AddPageCount:=3:
      if Page>plTackPrev1.OriginPageCount then begin
        Str:=IntToStr(Page-plTackPrev1.OriginPageCount);
        plTackPrev1.FontSize(50);
        plTackPrev1.TextOut(100,100,'追加の '+Str+'頁目です');
        exit;
      end;

>いつもリクエストに迅速なご対応を頂き、心から感謝しております。

実は必ずしも迅速ではないんです.
メールでの問合わせ分が溜まっています.メールで問合わせている方,
ゴメンなさい.ぼちぼちやっていますので.m(_ _)m

別に優先順位があるわけではないのですが,どうしてもレスポンスがいい
方に対して反応する様です (^^ゞ
 

[177] Re8:plTackPrevでの改頁方法(頁の追加)返信 削除
2005/3/7 (月) 13:44:53 yumapa
▼ Mr.XRAYさん

お陰様で、思ったとおりの動作をさせることが出来ました。
ありがとうございましたm(_ _)m

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82