喫茶XRAYトップページ


[359] 印刷プレビューのプリンタ切替返信 削除
2005/7/28 (木) 23:15:28 hahaha
はじめまして。
hahahaと申します。
いつも参考にさせていただいております。

印刷プレビュー+プリンタ設定の組み合わせで
複数のプリンタ or Fax(Microsoft Fax)を切り替えて印刷しています。
しかし、切替がうまくいかないので書込みさせていただきました。
設定ファイルを2つ作成し、各々の設定でプレビューします。
プレビューではうまく切り替わるのですが、実際に印刷すると
それ以降、印刷した設定に全て乗っ取られてしまいます。
お手すきの時で結構ですので、確認してはいただけないでしょうか?

WindowsXp(sp2),Delphi7の環境です。
TPを転記いたします。
var
        CuFile: String;        //保存ファイル名

{■Method:プレビュー【LBP】}
procedure TForm1.Button1Click(Sender: TObject);
begin
  plSetPrinter1.LoadFromFile('test.def');

  plPrev1.BtnOptions:=plPrev1.BtnOptions+[boPrinterSetBtn];
  plPrev1.ProcName  :=TestPrint;
  plPrev1.ShowModal;
  plPrev1.OnPrinterSetupDialog:=        nil;
end;

{■Method:プレビュー【FAX】}
procedure TForm1.Button4Click(Sender: TObject);
begin
  plSetPrinter1.LoadFromFile('FAX.def');

  plPrev1.BtnOptions:=plPrev1.BtnOptions+[boPrinterSetBtn];
  plPrev1.ProcName  :=TestPrint;
  plPrev1.ShowModal;
  plPrev1.OnPrinterSetupDialog:=        nil;
end;

{■Method:設定保存【LBP】}
procedure TForm1.Button2Click(Sender: TObject);
begin
 CuFile:= 'test.def';
  plSetPrinter1.LoadFromFile(CuFile);

  plPrev1.BtnOptions:=plPrev1.BtnOptions+[boPrinterSetBtn];
  plPrev1.ProcName  :=TestPrint;
  plPrev1.OnPrinterSetupDialog:=        plPrevPrinterSetupDialog;
  plPrev1.ShowModal;
  plPrev1.OnPrinterSetupDialog:=        nil;
end;

{■Method:設定保存【FAX】}
procedure TForm1.Button3Click(Sender: TObject);
begin
 CuFile:= 'FAX.def';
  plSetPrinter1.LoadFromFile(CuFile);

  plPrev1.BtnOptions:=plPrev1.BtnOptions+[boPrinterSetBtn];
  plPrev1.ProcName  :=TestPrint;
  plPrev1.OnPrinterSetupDialog:=        plPrevPrinterSetupDialog;
  plPrev1.ShowModal;
  plPrev1.OnPrinterSetupDialog:=        nil;
end;

{■Event:プリンタ設定変更時(ファイル保存)}
procedure TForm1.plPrevPrinterSetupDialog(Sender: TObject);
begin
  {設定した内容をplSetPrinter1のものとする}
  plSetPrinter1.GetPrinterInfo(False);
  {iniファイルに情報を保存}
  plSetPrinter1.SaveToFile(CuFile);
end;
{□Method:テスト印刷}
procedure TForm1.TestPrint;
begin
  plPrev1.FontHeight (120);
  plPrev1.TextOut(250,300,'[プリンタの設定]の保存と読出し');
end;

※この現象、実は回避策を施しています。
  plSetPrinter1.LoadFromFile(CuFile);
のあとに、
  plPrev1.plSetPrinter:= plSetPrinter1;
を実行すればうまくいくのですが、
このような仕様なのでしょうか?

長い文章になってしまいました。申し訳ありません。

[360] Re:印刷プレビューのプリンタ切替返信 削除
2005/7/29 (金) 00:06:11 Mr.XRAY
▼ hahahaさん

ども.拙作コンポのご利用ありがとうごさいます.

>   plSetPrinter1.LoadFromFile(CuFile);
> のあとに、
>   plPrev1.plSetPrinter:= plSetPrinter1;
> を実行すればうまくいくのですが、
> このような仕様なのでしょうか?


これは仕様です.コードを拝見する限り,一つのTplPrevと
TplSetPrinterを使用していますので,plPrevで印刷コードを書く前に
そのplSetPrinterプロパティにセットしないと反映しません.

というのは,plPrevが生成される時に,一番最初のplSetPrinterの
設定を使用します.その後に,plSetPrinterの設定が変更されても
その変更を読み取ってくれません.

多分,plPrev1.plSetPrinter:=plSetPrinter1;
or
plPrev1.plSetPriner.LoadFormFile(CuFile);
でも動作するかも知れません.

この仕様なんですが,複数のplSetPrinerを利用する場合を考えた
ものなんです.もし自動的にplSetPrinterの設定を読み取るように
すると,plSetPrinterが1しかない場合は,という制限をすることに
なるので,それなら,明示的に設定してもらった方がわかりやすい
と考えたものです.
常ににプリンタの設定はファイル(iniファイルも含めて)での読み書だけ
で行うとすれば,仕様の変更は可能だとは思いますが.
(つまり,複数のplSetPrinterの利用は許可しないということです)

ご不便とは思いますが,ご容赦下さい.


[361] Re2:印刷プレビューのプリンタ切替返信 削除
2005/7/29 (金) 00:15:05 Mr.XRAY
追加レスです.

この仕様によって,
(1) plPrevは一つで複数のplSetPrinterを使用して設定を切換え
(2) 複数のplPrevを使用し,plSetPrinterは一つ
(3) 複数のplPrefvを使用し,plSetPrinterも複数使用

といったことが可能になっています.
このことを微妙に利用したのがサンプルプログラム集にあります.
このサンプルプログラム集は,皆さんからの問合わせに応じて作成
したものです.つまり,現在のこの仕様は,いろいろな方の利用形態
を反映したものと考えています.



[362] Re2:印刷プレビューのプリンタ切替返信 削除
2005/7/29 (金) 02:29:12 hahaha
▼ Mr.XRAYさん
早速のご返答ありがちうございます。

> >   plSetPrinter1.LoadFromFile(CuFile);
> > のあとに、
> >   plPrev1.plSetPrinter:= plSetPrinter1;
> > を実行すればうまくいくのですが、
> > このような仕様なのでしょうか?
>
> これは仕様です.コードを拝見する限り,一つのTplPrevと
> TplSetPrinterを使用していますので,plPrevで印刷コードを書く前に
> そのplSetPrinterプロパティにセットしないと反映しません.

申し訳ありません。説明不足でした。
デザイン時にTplPrevのplSetPrinterにplSetPrinter1を既に設定しています。
これは、再設定をおこなわない限りTplPrevが存在する限りplSetPrinter1との
関連が保障されるわけではないのですか?
サンプルを拝見する限りplPrev.plSetPrinterを再設定するようには見えません。

plPrev1.plSetPriner.LoadFormFile(CuFile);
でも同様の現象になりました。
私としましては、プレビューするだけではうまくいくように見えて、
実際に印刷動作をおこなって場合にそれ以降のプレビューや印刷動作が
うまくいかないのが納得できないのです。

[365] Re3:印刷プレビューのプリンタ切替返信 削除
2005/7/30 (土) 11:12:44 Mr.XRAY
▼ hahahaさん

> 申し訳ありません。説明不足でした。

いえいえ,私が勝手に話をもっていってしまった様です.
少なくとも,現時点では,hahahaさんの疑問に関する動作は仕様のようです.

いろいろな報告や意見などを頂けるということは,それだけ拙作のコンポ
類を利用してもらえる姿勢ですので,時間がある限り調査して,いい方向に
もって行きたい思います.
さ〜て,いつになるやら.


INCM/CMT
Cyclamen v3.82