喫茶XRAYトップページ

[▲前のスレッド]

[2693] DesignedPaperSizeメソッドについて教えて下さい!返信 削除
2009/10/21 (水) 16:14:49 KSCHomePage
KSCです。

【印刷プレビューコンポーネント】
 自動拡大縮小印刷のための基準用紙サイズ指定
 DesignedPaperSize

を利用して描画したプレビューしているものを、
プレビューの[プリンタ・用紙]で設定したサイズに
拡大縮小しようとしたのですが、

【拡大】(設計時は「A4横」で「A3横」に変更)については、
プレビュー画面も印刷結果も何の問題も無かったのですが、

【縮小】(設計時は「A3横」で「A4横」に変更については、
「印刷可能範囲」がおかしくなってか(?)、添付イメージのような
プレビュー画面となり、印刷結果もプレビュー画面通りの印刷範囲で
印刷されます。

ただ、描画されている線やテキストなどの縮尺は、「A3→A4」の
縮尺になっています。

プレビューの[プリンタ・用紙]でサイズ変更後に何か値を変更または
再設定しないといけないのでしょうか?


[2695] Re:DesignedPaperSizeメソッドについて教えて下さい!返信 削除
2009/10/21 (水) 17:58:42 Mr.XRAY
▼ KSCさん

> 【印刷プレビューコンポーネント】
>  自動拡大縮小印刷のための基準用紙サイズ指定
>  DesignedPaperSize


これは,早速調べてみます.
最近,このメソッドのテストサボっています.すみません.
勤務先の職場で,B版が使われていて,何とかしてA版に移行したい
ために追加したのですが,現在は既にA版に完全移行してしまった
ので,私自身は使っていないため... (言い訳です)

[2697] Re2:DesignedPaperSizeメソッドについて教えて下さい!返信 削除
2009/10/21 (水) 18:20:03 KSCHomePage
KSCです。

> これは,早速調べてみます.

宜しくお願い致します。

ちなみに「A3横」→「A4横」を実行した時の
plPrevの用紙情報を載せておきます。(参考になるか分かりませんが)

[2701] TplPev修正版 まとめレス返信 削除
2009/10/22 (木) 17:01:18 Mr.XRAY
▼ KSCさん

> plPrevの用紙情報を載せておきます。(参考になるか分かりませんが)

お手数かけてスミマセン.
この図ありがたいです.コードのどの部分か推測の資料になります.
掲示板に図を1枚だけですが,表示できるように甲斐があります.

今日中に修正版アップします.
今回は,再インストールの必要はありません.
ファイルの上書きでOKです.

この図の文字列の幅のほうですが,
これは検討事項とさせてください.
もしかしたらそのままかも知れません.


[2702] Re:TplPev修正版UPしました返信 削除
2009/10/22 (木) 17:42:03 Mr.XRAY
> 今日中に修正版アップします.

今,UPしました.

> この図の文字列の幅のほうですが,
> これは検討事項とさせてください.


これ,上の「テストライン」の方が正常のような気がしますね.
う〜ん.

[2703] Re2:TplPev修正版UPしました返信 削除
2009/10/22 (木) 19:05:06 KSCHomePage
KSCです。


> 今,UPしました.

早速、ありがとうございます。
が、コンパイルできません。

plPrevFrm.pasにおいて、

556行 : TPv(FPrev).ReadPrinter(TPv(FPrev).SavePrinterStr);

コンパイラーから、「SavePrinterStr」が未定儀の識別子と
言われてしまいました。

尚、マスターの書き込み通り、コンポーネントの全ソースを上書き
しているだけです。

[2704] Re3:TplPev修正版UPしました返信 削除
2009/10/22 (木) 19:16:00 Mr.XRAY
▼ KSCさん
> 556行 : TPv(FPrev).ReadPrinter(TPv(FPrev).SavePrinterStr);
>
> コンパイラーから、「SavePrinterStr」が未定儀の識別子と
> 言われてしまいました。


えっ,そんな?
ちょっと待ってくださいませ.

[2705] Re4:TplPev修正版UPしました返信 削除
2009/10/22 (木) 19:27:22 Mr.XRAY
▼ KSCさん
> > 556行 : TPv(FPrev).ReadPrinter(TPv(FPrev).SavePrinterStr);
> >
> > コンパイラーから、「SavePrinterStr」が未定儀の識別子と
> > 言われてしまいました。


このSavePrinterStrはVer4.82から使用していません.
Ver4.81にはありますが,
もしかしてPLPREVFRM.pasが古くありませんか.
日付が本日になっているか確認してください.
あるいは古いPLPREVFRM.pasにバスが通っているとか...

[2706] 2:「DesignedPaperSize」のテスト結果イメージを掲載返信 削除
2009/10/22 (木) 20:02:21 KSCHomePage
KSCです。

「DesignedPaperSize」のテスト結果のイメージを添付します。

Ver4.85の場合

[2708] Re:2:「DesignedPaperSize」のテスト結果イメージを掲載返信 削除
2009/10/22 (木) 20:32:13 Mr.XRAY
▼ KSCさん

> 「DesignedPaperSize」のテスト結果のイメージを添付します。

う〜ん.変ですね(苦笑)
ちょっと待ってください.

[2709] Re2:2:「DesignedPaperSize」のテスト結果イメージを掲載返信 削除
2009/10/22 (木) 21:10:39 Mr.XRAY
> う〜ん.変ですね(苦笑)
> ちょっと待ってください.


以下のコードでテストしてみました.
上がA3,下がプレビューの[プリンタ設定]ボタンでA4にした結果です.
う〜ん(こればっかりですね),さて.

implementation

uses Printers;

{$R *.DFM}

//=============================================================================
//  DesignedPaperSizeのテスト
//  逐次表示方式のコード
//
//  フォームにplSetPrinterコンポーネントを配置して,適当なプリンタ名をセット
//  しておく
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
    //逐次表示方式では[プリンタ・用紙]のボタンが使用可能
    plPrev1.BtnOptions := plPrev1.BtnOptions+[boPrinterSetBtn];

    //3頁分
    plPrev1.PageCount := 3;

    //DesignedPaperSizeでA3を指定するのでA3用紙の横に設定
    plPrev1.plSetPrinter.PaperNumber := DMPAPER_A3;
    plPrev1.plSetPrinter.Orientation := poLandscape;

    //設計時の用紙設定(このDesignedPaperSizeを使用すると
    //印刷時に設定用紙サイズに拡大または縮小して印刷することができる
    plPrev1.DesignedPaperSize(2970,4200);
    plPrev1.ProcName := HogeHoge;

    //プレビュー開始.逐次表示方式にはShowメソッドはない
    plPrev1.ShowModal;
end;
//=============================================================================
//  実際の描画メソッド
//  このメソッド内に本コンポーネントのCanvasを使用したコードを記述.
//  複数頁の場合は,頁番号によって処理を分岐する.
//=============================================================================
procedure TForm1.HogeHoge;
begin
    if plPrev1.PageNumber = 1 then begin
      plPrev1.FontHeight (120);
      plPrev1.TextOut(100,300,'DesignedPaperSizeのテスト');
      plPrev1.TextOut(100,450,'[実行時のプリンタ設定でプレビューを確認]');
    end else

    if plPrev1.PageNumber = 2 then begin
      plPrev1.FontHeight (120);
      plPrev1.TextOut(100,300,'DesignedPaperSizeのテスト');
      plPrev1.TextOut(100,450,'[2頁目]');
    end else

    if plPrev1.PageNumber = 3 then begin
      plPrev1.FontHeight (120);
      plPrev1.TextOut(100,300,'DesignedPaperSizeのテスト');
      plPrev1.TextOut(100,450,'[3頁目]');
      plPrev1.Canvas.TextOut(100,600,'テストライン');
    end;

    //全頁共通の印刷コード
    //印刷可能領域に四角形を描画
    //少しは印刷領域の誤差があると思われるので1.0mm余裕をつける
    plPrev1.PenWidth(1);
    plPrev1.Rectangle(plPrev1.LeftOffset,
                      plPrev1.LeftOffset+plPrev1.PageWidth-10,
                      plPrev1.TopOffset,
                      plPrev1.TopOffset+plPrev1.PageHeight-10);
end;


[2710] Re3:2:「DesignedPaperSize」のテスト結果イメージを掲載返信 削除
2009/10/22 (木) 22:39:05 KSCHomePage
KSCです。

> 以下のコードでテストしてみました.
> 上がA3,下がプレビューの[プリンタ設定]ボタンでA4にした結果です.
> う〜ん(こればっかりですね),さて.


コードをコピペさせてもらい、テストしましたが同様の結果を得ました。

で、そんな中、ちょっと思ったのですが「逆転してませんか?」

【縮小】
 「A3」→「A4」の時に描画データが拡大されている。
 ([2709]記事のコードを実行した状態。)
【拡大】
 「A4」→「A3」の時に描画データが縮小されている。
 (こちらのソフトで確認しました。)


[2711] Re4:2:「DesignedPaperSize」のテスト結果イメージを掲載返信 削除
2009/10/22 (木) 23:04:59 Mr.XRAY
▼ KSCさん

> 【縮小】
>  「A3」→「A4」の時に描画データが拡大されている。
>  ([2709]記事のコードを実行した状態。)


ハハハッ,私なんか勘違いしていました.
そうですよね.明日にても修正します.
どうして,こんな勘違いを(冷や汗)
これじゃ,単に用紙サイズを変更しただけですね.

[2707] 1:「DesignedPaperSize」のテスト結果イメージを掲載返信 削除
2009/10/22 (木) 20:08:20 KSCHomePage
KSCです。

> このSavePrinterStrはVer4.82から使用していません.
> Ver4.81にはありますが,
> もしかしてPLPREVFRM.pasが古くありませんか.
> 日付が本日になっているか確認してください.
> あるいは古いPLPREVFRM.pasにバスが通っているとか...


すいません。古いファイルを使っていました。
Ver4.84と4.85のソースを入替でテストしていた時にミスりました。

DesignedPaperSize」のテスト結果のイメージを添付します。

【4.84】
 用紙に対して描画範囲が小さい!
【4.85】
 用紙に対して描画範囲が大きい!

Ver4.84の場合

[2712] 0.1mmの線の描画問題のテスト結果返信 削除
2009/10/22 (木) 23:10:09 KSCHomePage
KSCです。

0.1mmの線の描画問題のテスト結果を添付します。
 
PDFファイルを画像化したものです。
 
これを見る限り大丈夫だと思います。
明日、プリンターにて確認しようと思います。

[2713] 修正情報:0.1mmの線の描画問題のテスト結果返信 削除
2009/10/23 (金) 11:35:13 KSCHomePage
KSCです。

> 0.1mmの線の描画問題のテスト結果を添付します。
>
> PDFファイルを画像化したものです。
>
> これを見る限り大丈夫だと思います。
> 明日、プリンターにて確認しようと思います。


すいません。線の太さに気をとられて、
「点線」の所を見落としていました。

「点線」の所が直線に戻ってしまいました。

ちょうど、[2676]の記事の時代に戻った感じです。
ですから、ソース内で「0」指定してやれば、「点線」描画となります。


[2714] 再修正版UPしました返信 削除
2009/10/23 (金) 16:13:26 Mr.XRAY
▼ KSCさん,お手数かけています.

修正版UPしました.以下を修正しました.

(1) DesignedPaperSizeメソッド関係
    修正したのはplPrev.pas内のSetPaperInfoメソッドです.
    いままで,[印刷]の時にしか使用を考えていず,[プリンタ設定]
    ボタンでの動作確認はしていませんでしたが,今回のKSCさんの
    書込みで,改めて再検討させていただきました.
(2) 点線の件は,
    線の太さを設定してから線のスタイルを設定すると実線になって
    しまっていました.逆だとOKだったんですが(笑).
(3) [印刷]ボタンを[OK]でクリックすると,一瞬ボタン類の表示が
    乱れるのを防止しました(Updateを挿入しただけ)

以上です.
プロパティ関係の変更がないので,ファイルの上書きでOKです.
文字列の幅の件ですが,いい機会ですので少しやってみます.

[2715] Re:再修正版UPしました返信 削除
2009/10/23 (金) 17:21:51 KSCHomePage
KSCです。

> 修正版UPしました.以下を修正しました.

ありがとうございます。
が、少しおかしいような...。

「A4横」用紙でプレビューテストをしました。
その結果をPDFファイルとして、下記のアドレスに置いておきます。

http://kazuyoshisc.sakura.ne.jp/joomla/downloads/486_test001.pdf

「用紙方向」がおかしいような。
尚、「A4縦」でプレビューした際のプレビュー画面は正常でした。
(「A4縦」で印刷しましたが問題ないようです。)

尚、印刷したもので「点線」及び「線の太さ」を確認しましたが、
問題ありませんでした。

あと、もう少し(?) ... ... あなただけが頼りです!

> 文字列の幅の件ですが,いい機会ですので少しやってみます.

宜しくお願い致します。

[2716] 上記記事の追加情報です!返信 削除
2009/10/23 (金) 17:53:08 KSCHomePage
KSCです。

「A4縦」で拡大・縮小印刷をしてみました。
(「A3縦」→「A4縦」に縮小した印刷テスト)
プレビュー画面 → 問題なし。
印刷物     → 横方向の縮尺率:0.707... → OK
          縦方向の縮尺率:0.7087.. → OK(?)
          (雑なものさしで測ったので、あまり自信が...)

[2717] 「A2縦」→「A4縦」の縮小PDF印刷をしてみて!返信 削除
2009/10/23 (金) 18:21:42 KSCHomePage
KSCです。

「A2縦」→「A4縦」の縮小PDF印刷したものを下記のアドレスに
置いておきます。

http://kazuyoshisc.sakura.ne.jp/joomla/downloads/tate.pdf

やはり縮尺率が大きくなればなるほど上下左右のマージン値がきいてきます。

拡大・縮小時の上下左右のマージン値の計算を何とか出来ませんか?
(紙で印刷すると上下左右の各端が切れます。)
  ↑
 元々、この帳票の上下左右の各端がギリギリにしてあったので、
    切れてしまっているとも言えますが!

[2718] 自己レス返信 削除
2009/10/23 (金) 18:52:38 KSCHomePage
KSCです。

>  元々、この帳票の上下左右の各端がギリギリにしてあったので、
>     切れてしまっているとも言えますが!


上記のテストをしてみました。

「A2縦」の帳票デザインにおいて、
 左上(+5mm,+5o)右下(−5o,−5o)
補正して、「A2縦」→「A4縦」の縮小印刷をしました。

「A4縦」の印刷用紙は、端が切れずに綺麗に縮刷印刷されました。

[2719] Re:自己レス返信 削除
2009/10/23 (金) 21:03:56 Mr.XRAY
▼ KSCさん,どうも

多少はまともに動作するにようになったような気がします.

>あと、もう少し(?) ... ... あなただけが頼りです!

ホントにあと少し,これが長い...

>拡大・縮小時の上下左右のマージン値の計算を何とか出来ませんか?
>(紙で印刷すると上下左右の各端が切れます。)


これ,結構ややこしいんですよね.
例えば,用紙の右端のオフセット値というのがプリンタドライバ
から求まるんですが,これと左端のオフセットと用紙幅との関連
から計算します.これが,プリンタによっては,少し誤差がでる
ことがあります.

この内,どの値に一番信頼性があるかによって計算方法を変更する
ことになるんですが...
現状では,ある程度オフセット値に余裕もを持たせるしかないようです.

[2720] Re2:自己レス返信 削除
2009/10/23 (金) 21:07:45 Mr.XRAY
> ホントにあと少し,これが長い...

精神的にも (^^;
ても,KSCさんにとっては困り迷惑なことかも知れませんが,
こうして掲示板のやりとりで,プログラムが修正されていくのは,ちょっと
嬉しいです,

ただ,情報がまるみえなので,実力と能力がバレバレですが.

[2721] DesignedPaperSizeメソッドの使用方法の記事追加返信 削除
2009/10/23 (金) 21:51:13 Mr.XRAY
>http://kazuyoshisc.sakura.ne.jp/joomla/downloads/486_test001.pdf
>
>「用紙方向」がおかしいような。


DesignedPaperSizeメソッドの使用方法の記事を追加しておきました.
ちょっと説明不足でした.
http://mrxray.on.coocan.jp/Delphi/plPrev/M_Method.htm#09

今考えると,内部で用紙サイズの自動判定をすべきと思いますが,
互換性を考慮してこのままとします.
特に,引数の値の順番にご注意ください.

[2722] OKです!返信 削除
2009/10/23 (金) 23:08:24 KSCHomePage
KSCです。

> DesignedPaperSizeメソッドの使用方法の記事を追加しておきました.
> ちょっと説明不足でした.
> http://mrxray.on.coocan.jp/Delphi/plPrev/M_Method.htm#09
>
> 今考えると,内部で用紙サイズの自動判定をすべきと思いますが,
> 互換性を考慮してこのままとします.
> 特に,引数の値の順番にご注意ください.


この追加された情報のおかげで理解しました!

それまでは、用紙方向に合わせて引数の順番を入れ替えていた為、
今回のような現象が起こったようです。

ソース内では、常に縦向きで引数を割り当てるようにしました。

用紙方向の縦・横の各パターンで拡大・縮小をPDF出力しましたが、
全てOKでした!

マスター ... お疲れ!そして Good Job!!

それとマージンについてですが、
> 現状では,ある程度オフセット値に余裕もを持たせるしかないようです.

はい。その方法が現状ではベターですね!
帳票デザインする際の「注意点」と言う捉え方をしようと思います。

後は、何とか「文字幅」を ・・・ ・・・ !


[2723] 文字幅 フォント幅のテスト返信 削除
2009/10/24 (土) 09:29:13 Mr.XRAY
▼ KSCさん

> マスター ... お疲れ!そして Good Job!!

こう言われると更に頑張ってしまいそう.
KSCさんは人使いがうまいんだから.
誉め殺しにされそう...

で,文字幅のテストしてみました.
Delphi7では文字幅の変化ありませんでした.
Delphi2007でVer.8.46でやってみました.
テストコードは以下です.
結果,Delphi2007では,デフォルトのフォントにMS UI Gothicが
使用されているみたいです.
文字幅がなんか狭いので,もしかしたらと推測してのテストです.

フォント名を指定すればこの現象は避けられそうですが,
KSCさんの方ではどうなっているでしょうか.
風の噂では,最近開発環境をDelphi2007に変更したような...

procedure TForm1.Button1Click(Sender: TObject);
begin
     //用紙等の設定(ここでは横)
     plPrev1.plSetPrinter.Orientation := poLandscape;

     //印刷用のコードを書く
     plPrev1.BeginDoc;
     try
       with plPrev1 do begin
         FontHeight(200);
         FontName('MS Pゴシック');  //ここを変更してテスト
         Canvas.TextOut(200,500,'テストライン');
         TextOut(200,700,'テストライン');
         MoveTo(200,880);
         LineTo(1200,880);
       end;
     finally
       plPrev1.EndDoc;
     end;

     //プレビュー表示開始
     plPrev1.ShowModal;
end;


[2724] Re:文字幅 フォント幅のテスト返信 削除
2009/10/24 (土) 10:46:28 KSCHomePage
KSCです。

> こう言われると更に頑張ってしまいそう.
> KSCさんは人使いがうまいんだから.
> 誉め殺しにされそう...


いえいえ、本当の事ですから ... ! 感謝しています!

> Delphi2007でVer.8.46でやってみました.

んっ、「Ver.8.46」って、「Ver4.86」でしょ〜 !!

> フォント名を指定すればこの現象は避けられそうですが,
> KSCさんの方ではどうなっているでしょうか.
> 風の噂では,最近開発環境をDelphi2007に変更したような...


はい。Delphi2007での開発です。
フォント名を指定していない場合に「MS Pゴシック」を指定するよう
ソースを修正して、比較した結果を添付します。

幅は、これで良いのかな〜 ... ... ?
ただ、当然の事ですが微妙な配置ズレを起こしているようなので、
これに合わせて帳票デザインデータの位置情報を修正しなければ。

[2725] Re2:文字幅 フォント幅のテスト返信 削除
2009/10/24 (土) 11:11:40 Mr.XRAY
▼ KSCさん

> んっ、「Ver.8.46」って、「Ver4.86」でしょ〜 !!

ん? いよいよボケが.
かって,誤字脱字の... と言われていただけのことはあります.

>幅は、これで良いのかな〜 ... ... ?
> ただ、当然の事ですが微妙な配置ズレを起こしているようなので、
> これに合わせて帳票デザインデータの位置情報を修正しなければ。


いいんです.いいんです.きっと.
OSと開発言語のバージョンの違いは,何ともしがたいです.
では,頑張ってください.

さて,これで,Delphi2009,2010へ移行作業に入れるかな?

[2726] Re3:文字幅 フォント幅のテスト返信 削除
2009/10/24 (土) 12:47:25 KSCHomePage
KSCです。

> いいんです.いいんです.きっと.
> OSと開発言語のバージョンの違いは,何ともしがたいです.
> では,頑張ってください.


帳票デザインデータの位置調整は終わりました。
位置修正が必要なのは、「テキスト」だけで「矩形テキスト」は、
領域内で調整されるので修正の必要はありませんでした。

ありがとうございました。

> さて,これで,Delphi2009,2010へ移行作業に入れるかな?

頑張って下さい。
ただ、私は2009,2010を持っていないので2007の継続もお願いします!

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