喫茶XRAYトップページ

[スレッド全体
]

[79] Re2:plPrevのPageWidth,PageHeightについて教えて!返信 削除
2005/1/19 (水) 09:21:44 KSC
▼ マスターさん

おはようございます。

> >PaperWidth = 2970 , PaperHeight = 2100
> >PageWidth  = 2040 , PageHeight  = 2800
>
> うえっ,バグでしょうか.早速調査いたしました.
> 用紙のサイズはどのように設定したのでしょうか.


「バグ」だなんて、そんな事はないと思います!!

たぶん、私のやり方に問題があるのですが、その解決法が分かりません。

現在、plシリーズを利用させてもらい、レイアウトデザインツールを開発し、そのツールで作成したデータ
を読込コンポーネントとデータをplPrevへデータ変換してレイアウト描画する方式を仕上げ中なのですが、
用紙サイズの設定については、
 plPrev.ViewWidth  := FOMData1.CustomPaperWidth;   // 2970
 plPrev.ViewHeight := FOMData1.CustomPaperHeight;  // 2100
 と、ViewWidthとViewHeightに値を設定しているだけです。

ちなみにViewWidth,ViewHeightに値を設定するとPaperWidth,PaperHeightとPageWidth,PageHeightには、
どのような値として反映されるのでしょうか?


> 私のテスト内容です.
>
> (1)新規プロジェクト作成
> (2)フォームに以下を各々ひとつづつ配置
>      Button
>      plSetPrinter (用紙の設定をする時には必要.使用しないとplPrevは
>                    プリンタの現在の設定を使用する)
>      plPrev
> (4)plSetPrinter(プリンタ設定コンポ)をダブルクリックして
>    ダイアログの用紙設定で[印刷方向]を[横]にする
> (3)以下のコード書いて実行.横方向にプレビューも印刷もできました.
>    どうでしょうか.
>   ・
>   ・
>
> テスト環境は,Delphi5 Pro(UP1), WindowsXP(SP2)
>               plSetPriner,plPrev共最新バージョンです.
> プリンタは,PCのLPT1接続のEPSON PX-V600です.


テストまでして頂き、ありがとうございます。
前の書き込みでも書きましたが、1度レイアウト描画した後にプリンタ設定ダイアログを
起動して、OKクリックする事で正常なA4横の描画になるのですが、できる事ならプリンタ
設定ダイアログを起動せずに自動で設定したいのです!

宜しくお願い致します。


[80] Re3:plPrevのPageWidth,PageHeightについて教えて!返信 削除
2005/1/19 (水) 10:43:45 Mr.XRAY
▼ KSCさん

> ちなみにViewWidth,ViewHeightに値を設定するとPaperWidth,PaperHeightとPageWidth,PageHeightには、
> どのような値として反映されるのでしょうか?


ViewWidth,ViewHeightは用紙のサイズは変更しません.表示だけ変わります.

> できる事ならプリンタ設定・#95;イアログを起動せずに自動で設定したいのです!
(改行位置変更)

えっと,昨日私が提示した方法でも・#95;メだったということでしょうか.
設計時には

http://homepage2.nifty.com/Mr_XRAY/Delphi/plPrev/B_UseCont.htm

の図3のようになるわけですが...



[81] Re4:plPrevのPageWidth,PageHeightについて教えて!返信 削除
2005/1/19 (水) 11:43:32 KSC
▼ Mr.XRAYさん

こんにちは。

> ViewWidth,ViewHeightは用紙のサイズは変更しません.表示だけ変わります.

すいません。用紙サイズ・方向をソースで変更する様にするには、どのメゾット又は
プロパティを操作する様にプログラミングすれば良いのでしょうか?

> えっと,昨日私が提示した方法でもダメだったということでしょうか.
> 設計時には
>


いいえ、提示して頂いた方法でOKだったのですが、やりたいのは任意データ(用紙サイズ・方向,レイアウトデータ等)
を読み込んだ際に自動的にレイアウトに反映したいのです。

すいません。質問のしかたが下手で...

[82] Re5:plPrevのPageWidth,PageHeightについて教えて!返信 削除
2005/1/19 (水) 12:19:11 Mr.XRAY
▼ KSCさん

> いいえ、提示して頂いた方法でOKだったのですが、やりたいのは任意データ(用紙サイズ・方向,レイアウトデータ等)
> を読み込んだ際に自動的にレイアウトに反映したいのです。


コード上で設定するということですね.失礼しました.
プリンタの設定にはプリンタ設定コンポを使用します.

まず,プリンタ設定コンポTplSetPrinterを配置します.
次に,印刷プレビューコンポのplSetPrinterプロパティ(オブジェクト・
インスペクタでも指定可能)に,配置したプリンタ設定コンポを指定して
下さい.印刷プレビューは,このプリンタ設定コンポの設定にしたがって
プレビューします.

後は,このプリンタ設定コンポのPaperNumberとか Orientation プロパ
ティ等を設定することになります.
規定の用紙サイズ以外では,ユーザ定義用紙の作成メソッドを使用します.
印刷プレビューコンポのオンライン・マニュアルには,NkPrinterによる
設定方法もありますので,参考にして下さい.




[83] Re6:plPrevのPageWidth,PageHeightについて教えて!返信 削除
2005/1/19 (水) 14:08:24 KSC
▼ Mr.XRAYさん

たびたび、すいません。

> コード上で設定するということですね.失礼しました.

はい。

> プリンタの設定にはプリンタ設定コンポを使用します.
> まず,プリンタ設定コンポTplSetPrinterを配置します.
> 次に,印刷プレビューコンポのplSetPrinterプロパティ(オブジェクト・
> インスペクタでも指定可能)に,配置したプリンタ設定コンポを指定して
> 下さい.印刷プレビューは,このプリンタ設定コンポの設定にしたがって
> プレビューします.
>
> 後は,このプリンタ設定コンポのPaperNumberとか Orientation プロパ
> ティ等を設定することになります.


TplSetPrinterを配置し、再描画ボタンを配置して、イベントソースは下記の通りです。

procedure TPrevFrm.ReDrawBtnClick(Sender: TObject);
begin
  // FOMData1は、レイアウトデータを管理しているコンポーネントです。
 // PDirectionの値はTPrinterOrientation型でpoLandscapeです
  plPrev1.plSetPrinter.SetOrientation( FOMData1.PDirection );

 // CustomPaperWidthの値は用紙幅方向データで値は2970です
 // CustomPaperHeightの値は用紙幅方向データで値は2100です
  if (plPrev1.ViewWidth <> FOMData1.CustomPaperWidth)
    or (plPrev1.ViewHeight <> FOMData1.CustomPaperHeight) then begin
    plPrev1.ViewWidth := FOMData1.CustomPaperWidth;
    plPrev1.ViewHeight := FOMData1.CustomPaperHeight;
    PageWholeBtnClick( Sender );
  end;

  plPrev1.Display(plPrev1.PageNumber);
end;

この時、
☆plPrevの画面上の用紙は、A4横になっている。
☆印刷範囲は、やはりデフォルトプリンターの既定値(A4縦)のままである。
☆プリンター設定ダイアログを開くと用紙方向は横がチェックされています。
 ダイアログをOKクリックすると印刷範囲はA4横となります。

後、何がソース上、足りないのでしょうか?


[84] Re7:plPrevのPageWidth,PageHeightについて教えて!返信 削除
2005/1/19 (水) 17:44:55 Mr.XRAY
▼ KSCさん

A4横の場合の設定です.
usesにPrintersが必要(poLandScape定数使用のため).

なお,ViewWidth,ViewHeightは特別な用途に使用します.
プレビュー上の用紙の見かけのサイズを変更するだけで,用紙サイズ
を変更するわけではありません.用紙そのものは,プリンタの設定で
行います.通常は設定する必要はありません.

procedure TForm1.Button1Click(Sender: TObject);
begin
     //ユーザ定義用紙にしたい場合は,以下の2行のかわりに
     //plPrev1.plSetPrinter.SetUserPaper(........)を使う
     plPrev1.plSetPrinter.PaperNumber:=DMPAPER_A4;
     plPrev1.plSetPrinter.Orientation:=poLandScape;

     plPrev1.BeginDoc;
     plPrev1.FontSize(100);
     plPrev1.TextOut(300,500,'喫茶XRAY 喫茶XRAY 喫茶XRAY');
     plPrev1.EndDoc;
     plPrev1.ShowModal;
end;

>procedure TPrevFrm.ReDrawBtnClick(Sender: TObject);

ということは逐次表示方式でしょうか.
このReDrawBtnというのは(継承)プレビューフォーム上にあるのでしょうか.




[85] プレビュー中に用紙サイズ等を変更する方法(逐次表示方式)返信 削除
2005/1/19 (水) 18:17:23 Mr.XRAY
▼ KSCさん
> ReDrawBtnClickということは逐次表示方式でしょうか.
> このReDrawBtnというのは(継承)プレビューフォーム上にあるのでしょうか.


もし上記の状況での使用であれば,以下のようにしてみて下さい.
(先読み方式ではこの手法は使えません)
つまり,プリンタの設定ダイアログを表示するかわりに
PrinterSetBtnClickの引数にnilを渡して設定します.nilを渡すと
ダイアログを表示しないで現在のプリンタの設定でプレビューし直します.

Btn1ClickがReDrawBtnClickに該当.
Form1はメインフォーム
usesにPrintersが必要

procedure TplPrevForm2.Button1Click(Sender: TObject);
begin
    Form1.plPrev1.plSetPrinter.PaperNumber:=DMPAPER_A4;
    Form1.plPrev1.plSetPrinter.Orientation:=poLandScape;
    PrinterSetBtnClick(nil);
end;

[87] Re:プレビュー中に用紙サイズ等を変更する方法(逐次表示方式)返信 削除
2005/1/19 (水) 19:11:18 KSC
▼ Mr.XRAYさん

こんばんは。

> もし上記の状況での使用であれば,以下のようにしてみて下さい.
> (先読み方式ではこの手法は使えません)
> つまり,プリンタの設定ダイアログを表示するかわりに
> PrinterSetBtnClickの引数にnilを渡して設定します.nilを渡すと
> ダイアログを表示しないで現在のプリンタの設定でプレビューし直します.
>
> Btn1ClickがReDrawBtnClickに該当.
> Form1はメインフォーム
> usesにPrintersが必要
>
> procedure TplPrevForm2.Button1Click(Sender: TObject);
> begin
>     Form1.plPrev1.plSetPrinter.PaperNumber:=DMPAPER_A4;
>     Form1.plPrev1.plSetPrinter.Orientation:=poLandScape;
>     PrinterSetBtnClick(nil);
> end;


データを読み込んだ際に、
plPrev1.plSetPrinter.Orientation:=poLandScape;
PrinterSetBtnClick(nil);

を実行する事で問題解決する事が出来ました。
ありがとうございました。

これからも宜しくお願い致します。


[86] Re8:plPrevのPageWidth,PageHeightについて教えて!返信 削除
2005/1/19 (水) 19:09:09 KSC
▼ Mr.XRAYさん

こんばんは。

> A4横の場合の設定です.
> usesにPrintersが必要(poLandScape定数使用のため).
>
> なお,ViewWidth,ViewHeightは特別な用途に使用します.
> プレビュー上の用紙の見かけのサイズを変更するだけで,用紙サイズ
>   ・
>   ・
>   ・
>      //ユーザ定義用紙にしたい場合は,以下の2行のかわりに
>      //plPrev1.plSetPrinter.SetUserPaper(........)を使う
>      plPrev1.plSetPrinter.PaperNumber:=DMPAPER_A4;
>      plPrev1.plSetPrinter.Orientation:=poLandScape;


用紙サイズの設定は、既定サイズについてはPaperNumberの様に定数にて設定するしか方法は、ありませんか?
と言うのは、レイアウトデータが全てmmデータで管理している為。
既定サイズもユーザー指定サイズの様にSetUserPaperで設定しても問題ないのでしょうか?

> >procedure TPrevFrm.ReDrawBtnClick(Sender: TObject);
>
> ということは逐次表示方式でしょうか.
> このReDrawBtnというのは(継承)プレビューフォーム上にあるのでしょうか.


はい。その通りです。

[88] Re9:plPrevのPageWidth,PageHeightについて教えて!返信 削除
2005/1/19 (水) 19:28:00 Mr.XRAY
▼ KSCさん

> 既定サイズもユーザー指定サイズの様にSetUserPaperで設定しても問題ないのでしょうか?

問題ないはずです.
ただし,指定したサイズが規定の用紙の場合,その用紙が選択されますが,
ユーザ定義(の名前の)用紙も作成されてしまいます.
(WindowsNT系のOS場合)

解決に時間がかかってしまって申し訳ないですね.
最近,ここのマスターは,年のせいか,脳が軟化しているようで,
読解力が落ちてきているようなんです.

[89] Re10:plPrevのPageWidth,PageHeightについて教えて!返信 削除
2005/1/19 (水) 23:19:36 KSC
▼ Mr.XRAYさん

こんばんは。

> > 既定サイズもユーザー指定サイズの様にSetUserPaperで設定しても問題ないのでしょうか?
>
> 問題ないはずです.
> ただし,指定したサイズが規定の用紙の場合,その用紙が選択されますが,
> ユーザ定義(の名前の)用紙も作成されてしまいます.
> (WindowsNT系のOS場合)


既定サイズですが、オンラインマニュアルにはD___A3が数値で8とか書いてあったように
記憶していますが、既定サイズの名前一覧は、オンラインマニュアル上に書いてあったでしょうか?

> 解決に時間がかかってしまって申し訳ないですね.
> 最近,ここのマスターは,年のせいか,脳が軟化しているようで,
> 読解力が落ちてきているようなんです.


いえいえ、そんな事はありません。
素早い対応をして頂き、大変助かりました。
社内用のデータベースソフト開発で今回の件が引っかかっていたのですが、
おかげで解決でき、明日から別画面の開発に移れます。

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

[90] 用紙サイズの定数値は Win32 APIヘルプで返信 削除
2005/1/19 (水) 23:38:22 Mr.XRAY
▼ KSCさん

> 既定サイズですが、オンラインマニュアルにはD___A3が数値で8とか書いてあったように
> 記憶していますが、既定サイズの名前一覧は、オンラインマニュアル上に書いてあったでしょうか?


ありません.一時期は掲載していたのですが,量があるのでやめました.
Win32 APIのヘルプをDevModeで検索すると一覧がありますので,そちらを
参考にして下さいませ.

[93] Re:用紙サイズの定数値は Win32 APIヘルプで返信 削除
2005/1/20 (木) 08:30:01 KSC
▼ Mr.XRAYさん

おはようございます。

> > 既定サイズですが、オンラインマニュアルにはD___A3が数値で8とか書いてあったように
> > 記憶していますが、既定サイズの名前一覧は、オンラインマニュアル上に書いてあったでしょうか?
>
> ありません.一時期は掲載していたのですが,量があるのでやめました.
> Win32 APIのヘルプをDevModeで検索すると一覧がありますので,そちらを
> 参考にして下さいませ.


会社の書庫にWindows95 APIバイブルが眠っている事を思い出して、朝、引っ張り出して調べたら載っていました。
一覧の中から利用頻度の高そうなものをピックアップして数値データを名前に変換するメゾットを作成して対応しようと思います。

[94] Re2:用紙サイズの定数値は Win32 APIヘルプで返信 削除
2005/1/20 (木) 23:20:16 Mr.XRAY
▼ KSCさん

> 会社の書庫にWindows95 APIバイブルが眠っている事を思い出して、朝、引っ張り出して調べたら載っていました。
> 一覧の中から利用頻度の高そうなものをピックアップして数値データを名前に変換するメゾットを作成して対応しようと思います。


Windows95 APIバイブル,これもっています.サンプルプログラム類の
PrintDlgAPIの使用方法も,この本を参考にして作成しました.

活用されてAPIバイブルもさぞ喜んでいることでしょう. (^_^);



[108] Re3:用紙サイズの定数値は Win32 APIヘルプで返信 削除
2005/2/2 (水) 17:57:14 KSC
▼ Mr.XRAYさん

こんばんは、今回の一連の件についてですが、plSetPrinterの「バージョンアップ後のエラー」
ページの意味を私が理解しておらず、コンポーネントの再配置を怠った事が原因の1つだったようです。

再配置後は、教えて頂いたソースで快適に動作しています。

私の不注意でマスターの手を煩わしてしまいました。

本当にごめんなさい。


[110] Re4:用紙サイズの定数値は Win32 APIヘルプで返信 削除
2005/2/2 (水) 23:24:54 Mr.XRAY
▼ KSCさん

> 私の不注意でマスターの手を煩わしてしまいました。

いや,そんなことはないと思いますよ.配置し直して動作がうまくいったと
しても,それは偶然ではないかと....
でも,動けば正義です!! ハイ!!


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