喫茶XRAYトップページ


[1128] plTackPrevでのカラムのテキスト描画返信 削除
2007/2/27 (火) 13:24:57 yumapa
Mr.XARYさん
いつもお世話になっておりますyumapaです。

封筒印刷アプリをこれまで、plTackPrintを利用させて頂いて
おりましが、この度、plTackPrevへの切替作業を行っております
ところです。

概要は、StringGrid上に表示されている文字列をデータとし、
データセットを利用しておりません。
onBeforeDataDrawメソッドにて、
 Columns[1].Text:=From1.StringGrid1.Cells[1,1];
 Columns[2].Text:=From1.StringGrid1.Cells[2,1];
 Columns[3].Text:=From1.StringGrid1.Cells[3,1];
としてデータの描画を行っております。
これまで、plTackPrintにおいては正常にテキストは
描画されておりましたが、plTackPrevでは全く描画されません。
因みに、Mr.XARYさんのはがき印刷サンプルにおいて
作成者名をColumnsのTextプロパティに記載されてみえる
ように同様に試してみましたが、全く何も描画されません。
アドバイスを宜しくお願い致します。


[1129] Re:plTackPrevでのカラムのテキスト描画返信 削除
2007/2/27 (火) 22:39:37 Mr.XRAY
▼ yumapaさん

> おりましが、この度、plTackPrevへの切替作業を行っております
> ところです。


なかないいいアイディアです(笑)。
ところで、データベースは何か使用していますでしょうか。


[1130] Re2:plTackPrevでのカラムのテキスト描画返信 削除
2007/2/27 (火) 23:38:06 yumapa
▼ Mr.XRAYさん
早速のレスありがとうございます、yumapaです。

データベースはParadoxを使用し、その他環境はWinXP + Delphi7Proです。

住所録データベースをStringGridに一覧表示させ、封筒宛名印刷を
行いたいデータ行を選択し、印刷プレビューをしております。
複数の相手を選択し、複数住所宛の封筒を印刷させる場合には
データセットを指定しておりますが、今回は、常に一人のみしか
封筒を印刷しないケースのためColumnsのTextプロパティに直接
StringGridのセルの値を読み込む方法としております。
宜しくお願い致します。

[1131] Re3:plTackPrevでのカラムのテキスト描画返信 削除
2007/2/28 (水) 21:45:45 Mr.XRAY
▼ yumapaさん

先程、テストプロジェクトを作成してサンプルを作成しようと思ったら、
PCが...  スミマセン、詳しいことはのちほど。
これからPCの整備に入ります。


[1132] Re4:plTackPrevでのカラムのテキスト描画返信 削除
2007/2/28 (水) 21:54:23 Mr.XRAY
> PCが...  スミマセン、詳しいことはのちほど。
> これからPCの整備に入ります。


えっと、Delphiが起動しなくなってしまいました(泣)。
そろそろPCの買い替え時かも...
なんかPCが唸っています。HDDか?

[1133] Re5:plTackPrevでのカラムのテキスト描画返信 削除
2007/3/1 (木) 11:26:35 yumapa
▼ Mr.XRAYさん
いつもお世話になっております。yumapaです。
PCの具合はいかかでしょうか...

完全な解決には至っておりませんが、一応は思い通りの
動作を得ることができました。
1件のみのデータを描画する場合でしたので
 plTackPrev1.LabelCount:=1;
とする必要があったようです。
以前、plTackPrintにて同様の事を行っていました時には
データ数を指定することなく動作していましたので
気付くことができませんでした。

さらに、アドバイス頂きたい部分があります。
封筒印刷を行う場合に、印刷したいデータを選択した後に
封筒サイズを選択するフォームを表示させ、長形3号、角形2号
等々を選択してからプレビューするようにしております。
そのため、plTackPrevコンポーネントはこの封筒サイズ選択
フォームに配置しております。
アプリにはA住所データを表示するフォーム、B住所データを
表示するフォーム、C住所データを表示するフォームの3つが
あり、何れのフォームからも最後は封筒サイズ選択フォームで
サイズ選択してからプレビューさせています。
A住所、B住所からプレビューする場合には、データセットを
利用し複数の宛先データを印刷しますが、C住所からの場合
には、1件のみのデータしか印刷しません。
デフォルトではA住所、B住所からの印刷を想定し、データセットを
指定しているのですが、C住所から印刷する場合は直接各カラムの
テキストプロパティに文字列を代入するため、
「Query1:SQL文がありません」とエラーになります。

そこで、動的にplTackPrevのデータセットを指定したり、
または指定しない状態にしたりすることが出来れば、このエラーは
発生しなくなると思うのですが、その部分でつまづいております。
最も、私の考えている方法が適切かどうか自身はありません(^^;が
何かアドバイスを頂けたら幸いです。



[1137] Re6:plTackPrevでのカラムのテキスト描画返信 削除
2007/3/2 (金) 20:28:51 Mr.XRAY
▼ yumapaさん

すみません.まだテストプログラムの作成や動作ができない状態ので,確認
はしていませんが,

> そこで、動的にplTackPrevのデータセットを指定したり、
> または指定しない状態にしたりすることが出来れば、このエラーは


DataSetプロパティを空にするか,または,コード上で
  DateSet:=nil;
などとして下さい.この時,印刷のコードを実行するには以下の2つの
方法が考えられます.

(1)全てOnBeforePagerDraw(or OnAfterPageDraw)に書く
   このイベントはDataSetの有無に関係なく実行されます.
   (OnXXXXLableDrawでも可)
(2)TplTackPrevのColumnssプロパティでカラムエディタを起動し,
   空のカラムを一つ作成する
   すると,実行時にOnXXXXDataDraw,が発生します.ここに書きます.

あと,テストプログラムのEnvelopeを参考にして下さい.イベント内に
plTackPrev1.Canvas.TextOut(X,Y,テキスト文字列);
ように書きます.

[1139] Re7:plTackPrevでのカラムのテキスト描画返信 削除
2007/3/3 (土) 01:49:18 yumapa
▼ Mr.XRAYさん

いつもご指導頂きありがとうございます。
大変なところ、本当にスミマセンm(__)m

質問させて頂いた後も、DelphiML等で、参考になる部分が
ないか色々自分なりに調べていましたところ、1つのQueryに
場合によって異なったSQL文を書き分ける...というようものが
ありました。
その中で、識者の方のレスに、Queryをその場合の数だけ
設置したらどうかという発言があり、今回の私も正に
そのパターンであると思いました。
そこで、
 ・データセットを利用する場合用に1つ
 ・データセットを利用しない場合用に1つ
計2つのplTackPrevコンポを配置することで、思ったとおりの
動作を得ることができました。
あちこちのフォームから印刷を行うため、やはりコーディングに
拠らない方が、私のようなど素人には適当かもしれません(^^;
学習のために、アドバイス頂いた方法も試してみます。

約4年前にプログラミングをはじめた頃から、少しずつ不具合等を
修正しながら使っているアプリですので、無駄なコーディングや
不要なコンポーネントが沢山ありすぎて、ちょっとした手直しも
問題箇所が特定出来ず、多大な労力を要しております(^^;
今後とも宜しくお願い致します。



[1140] Re8:plTackPrevでのカラムのテキスト描画返信 削除
2007/3/3 (土) 09:33:13 Mr.XRAY
▼ yumapaさん

> その中で、識者の方のレスに、Queryをその場合の数だけ
> 設置したらどうかという発言があり、今回の私も正に


Queryで言えば、私の場合、メインとなるマスターは専用のQuery、細かい検索
等は、SQL文をコード上で書くことが多いです。
また、plTackPrevは、ほとんどプレビューフォーム一つに一つという感じで
配置して使用しています。

いろいろな使い方があっていいと思います。


INCM/CMT
Cyclamen v3.82