喫茶XRAYトップページ

[スレッド全体
]

[4147] QuickReportでのプリンタ設定返信 削除
2011/1/7 (金) 21:48:40 小豚丸
XRAYさん、初めまして

もし御存知でしてら、ぜひご教授して頂きたいですが、
実はQuickReportでレポートを印刷していますが、どうも
プレビュー画面より、プリンタ設定画面を開いて、設定しても
出力トレイと、白黒指定等がうまく行かなくて、大変困っています。

QuickReportのバグと私が思っていますが、気づいたら、いくら設定
しても、QuickReportが印刷時に使用されるプリンタの設定は、
システム上のプリンタの設定のようでした。

XRAYさんのプリンタ設定コンポは一時的にシステムのプリンタ設定
を変更して、印刷後、設定を戻すことは可能でしょうか?

ご指導よろしくお願いいたします。

[4150] Re:QuickReportでのプリンタ設定返信 削除
2011/1/7 (金) 23:45:16 Mr.XRAY
▼ 小豚丸さん,こんにちは.

> XRAYさんのプリンタ設定コンポは一時的にシステムのプリンタ設定
> を変更して、印刷後、設定を戻すことは可能でしょうか?


できません(キッパリ!!)
QuickReportは,内部で独自のプリンタというか,用紙の設定を保持して
いて,それを実際に印刷する際に,プリンタに対して設定するので,
プリンタの設定をあらかじめ行う,拙作コンポではできません.

QuickReportは,たしか,印刷時に何かイベントであって,そこで設定
が多少はできた記憶がありますが,何分にもかなり昔のことなので...
でも,記憶によると,ネット上に何か情報があったと思います.
え〜と,何で検索すればいいかな?
QuickReport 用紙設定 いや,ちょっと待ってください.

かなり強引な方法ですが,
一時的に,通常使用するプリンタの設定を変えてしまう方法も
あるようです.最終手段ですね.
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00614.html

>出力トレイと、白黒指定等がうまく行かなくて、大変困っています。

設定関係にもよりますから,用紙サイズとかプリンタとがわかれば,
より正確な調査が可能でしょう.


[4155] Re2:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 00:04:33 Sara
▼ Mr.XRAYさん ▼ 小豚丸さん,こんばんは.

> > XRAYさんのプリンタ設定コンポは一時的にシステムのプリンタ設定
> > を変更して、印刷後、設定を戻すことは可能でしょうか?
>
> できません(キッパリ!!)


> 一時的に,通常使用するプリンタの設定を変えてしまう方法も
> あるようです.最終手段ですね.
> http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00614.html


014_Save_PrinterProperty の方法で現在の設定を保存して
通常使用するプリンターの設定を変更したのちに、
014_Save_PrinterProperty の方法で、設定を戻せば良いかと・・・

昔、QuickReportを使う必要にせまられて、これをやったような記憶が
かすかにあります・・・(^^;

最近印刷するときは、コードをガリガリ書いてますんで・・・(^^;

[4156] Re3:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 00:13:15 Mr.XRAY
▼ Saraさん

> 昔、QuickReportを使う必要にせまられて、これをやったような記憶が
> かすかにあります・・・(^^;


そうですか,Saraさんもそういうせこいことやったことあるんですか,
この方法使って,QuickReportの印刷制御やっている方いるみたいですね.


[4157] Re4:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 00:17:21 Sara
▼ Mr.XRAYさん こんばんは

> > 昔、QuickReportを使う必要にせまられて、これをやったような記憶が
> > かすかにあります・・・(^^;
>
> そうですか,Saraさんもそういうせこいことやったことあるんですか,

せ・せこいっすか?・・・(^^;

か、勝てば官軍っすよ<(`^´)>エッヘン (^^;

[4158] Re5:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 00:32:30 小豚丸
皆さんのご返信、どうもありがとうございます。

前は2週間も調べて色んな方法をやってみて、結局だめでした。

再度、ご提言にチャレンジしてみます。

ありがとうございます。

[4159] Re6:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 09:20:39 Sara
▼ 小豚丸さん こんにちは

> 再度、ご提言にチャレンジしてみます。

一番簡単な方法としては・・・
1.必要な設定を通常使うプリンターに直接する。(コントロールパネルから直接)
2.別プログラムを作って014_Save_PrinterProperty の方法で現在の設定を保存
3.通常使うプリンターの設定を元にもどす。(コントロールパネルから直接)

下準備としてここまでを行ってください。

で、実際に使いたいプログラムでは、
a.014_Save_PrinterProperty の方法で現在の設定を保存
b.上記2で保存した内容を014_Save_PrinterProperty の方法で復元
c.QuickReportで印刷
d.a.の設定を014_Save_PrinterProperty の方法で復元

でしょうか・・・これなら014_Save_PrinterProperty の方法だけで実現できます。
また、a.で一時ファイルを使いたくない場合は、ちょっとの変更でMemoryStream
に保存することもできます。


[4160] Re7:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 10:07:19 Sara
▼ 小豚丸さん こんにちは

> 一番簡単な方法としては・・・

実行環境があるところで、実際に行おうとしてみました・・・が
そもそも、通常使うプリンターの設定すら無視されますね・・・(^^;
これでは、設定を保存して復元しても意味ないですね・・・

昔はできたようなきがするんですが・・・QuickReportのバージョンかなぁ
むかしは、QuickReport2か3だった気がするけど・・・
すくなくとも、QuickReport4+Delphi2007では正常に動いてないです
今のところ・・・(^^;

ちょっと、調べてみます。(解決できないかもですが・・・)


[4161] Re8:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 10:21:34 Mr.XRAY
そういえば,私も「持っていない」ではなく「インストールしていない」
ですね.
こんなのを見つけました.参考になるでしょうか.

連続帳票の用紙サイズについて
http://delphi.arcadiangarden.com/delphilounge/webconv.dll/alltree?No=20744

QuickReportのバージョン等は不明ですね.


[4162] Re9:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 10:47:19 小豚丸
私もQuickReport4+Delphi2007でさんざんやってだめでした。

最新のQuickReport5はDelphi2010しか対応してないので、
Delphi2010への移行はまだ勉強不足でてきていません。

 
こちらの方は参考してやってみます。

> 連続帳票の用紙サイズについて
> http://delphi.arcadiangarden.com/delphilounge/webconv.dll/alltree?No=20744
>


[4165] Re10:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 12:00:36 Sara
▼ 小豚丸さん

> 私もQuickReport4+Delphi2007でさんざんやってだめでした。
>
> 最新のQuickReport5はDelphi2010しか対応してないので、
> Delphi2010への移行はまだ勉強不足でてきていません。


なんだか、昔の記憶がまたちょっと蘇ってきましたが
そういえば、この設定ができなくてプリンタードライバーのコピーを
複数作成して(LP-9200(コピー1)とか)、それぞれのドライバーに
利用ポートなどを設定して通常使うプリンターごと切り替えて印刷を
していたかも・・・

現在こちらの環境では、トレイ1(裏紙)とトレイ2(白紙)にA4が入っていて
トレイ2を指定してもトレイ1から排出されるので(標準設定はトレイ2)この
方法でもだめな可能性大ですが・・・(用紙サイズが違えばあるいわ・・・)

やっぱり、ソースの無いコンポはあきらめて、コードでガリガリ書きましょうよ(笑い)
なれると、そんなに苦になりませんよ(^^;

罫線が必要ならExcelで作って
http://ht-deko.minim.ne.jp/junkbox.htmlにあるスプール変換ツールでMetaFile化して
プリンターに描画した後に文字列の描画をすればOK。(^^;


[4166] Re11:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 13:58:04 Mr.XRAY
質問の趣旨とは直接関係ないのですが,Delphi 6 ProにQuickReport3.0を入れて
テストしてみました.
ネットでよく質問がある,実行時にプリンタを指定するテストです.
Demoプログラムの以下の部分,つまり,Printの前で設定しました.

ネット上の質問者のコードとは違いますね.
以下のコードはQuickReport3.0のヘルプに書いてあったコードです.
皆さん,ヘルプは見ているのでしょうか.

procedure TfrmQR3Demo.btnPreviewClick(Sender: TObject);
begin
  // This code is more complicated than what you would
  // typically need to run a report.  Most of this code
  // is to handle the selection of the various types of
  // reports.
 
  // 中略

      else if sender = btnPrint then begin
        report.Printersettings.printerindex:=
                            printer.printers.Indexof('EPSON PM-760C ESC/P R');
        report.Page.PaperSize := A5;
        report.Page.Orientation := poLandscape;

        //上の4行が追加分
        report.print;
      end;
    end;
  end;
end;

それと,Bin装置は,
http://www.quickreport.co.uk/faqs.aspx
のどれかのドキュメントにありましたが,QR3.0時点では,

「outputbinプロパティのマニュアルページ(5〜121)に記載されているビンを選択
デバイス固有のビンは、現時点ではサポートされていません」

ことなので,確認する必要がありますね.
確認用のプログラムは以下にあります.
http://mrxray.on.coocan.jp/Delphi/plSamples/012_PrintResolution.htm#04

これでBin番号が5-121にないビン装置であればサポートなしということですね.

>コードでガリガリ書きましょうよ(笑い)
>なれると、そんなに苦になりませんよ(^^;


ですね.これが一番,なんてね.


[4167] Re12:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 14:02:32 Mr.XRAY
> これでBin番号が5-121にないビン装置であればサポートなしということですね.

http://delphi.arcadiangarden.com/delphilounge/webconv.dll/alltree?No=20744


  //給紙トレイ
   (PInteger(@cQRBinTranslate[Upper]))^ := 290 ;  //印刷したいDC_BINSの値
    QuickRep1.PrinterSettings.OutputBin := Upper;
    QuickRep1.PrinterSettings.ApplySettings(QRPrinter);
    QuickRep1.PrinterSettings.PrinterIndex := Printer.PrinterIndex;
    QuickRep1.Print;

が使えるかも知れませんが.
これはテストしていません.
でも,少なくても,実行時,印刷時にサポート範囲内であればプリンタの
設定は可能であることが分かりました.

任意サイズの設定方法も
>http://www.quickreport.co.uk/faqs.aspx
>のどれかのドキュメントにありましたが,QR3.0時点では,


に書いてありました.たしか,quickreportfaq.docというドキュメント
だったと思います.
片っ端からダウンロードしてしまったので,何かどかに書いてあったのか
 ハハハッ.オバカですね.


[4169] Re13:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 14:34:04 小豚丸
Mr.XRAYさん


QuickRep1.PrinterSettings.ColorOption := //白黒は1 カラーは2

をもやってみたが、全然反映されませんでした。

ですので、システムのプリンタの設定を一時に変更することが可能であれば、
それが一番の近道かもしれません。

QuickReportのコンポーネント(ソースも)を購入していますが、
力不足で解読することが......

とりあえず、Saraさん、Mr.XRAYさんもご協力ありがとうございます。

なにか方法がわかれば、ぜひ教えて頂きたいです。

これを解決しないと、たぶん私が解雇されます。

[4170] Re14:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 14:46:51 Mr.XRAY
▼ 小豚丸さん

> QuickRep1.PrinterSettings.ColorOption := //白黒は1 カラーは2

ColorOptionというのがあるのですか.
3.0にはないですね.
ところで,このコードはどこで実行しているのでしょうか.

> QuickReportのコンポーネント(ソースも)を購入していますが、

ソースがあるのは強みです.
QuickReportは,実際の印刷の時に初めてプリンタオブジェクトを生成
するはずなので(少なくても3.0までは),
プレビューは反映されない設定もあるハズです.
ソースがあれば確認できるんですが.

> これを解決しないと、たぶん私が解雇されます。

一時そういう経験もいいかも知れませんよ(冗談です!!)


[4171] Re15:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 14:54:00 Mr.XRAY
それと,確認ですが,Delphiのバージョン,QuickReportのバーション等の
情報ですね.


[4173] Re16:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 14:59:22 小豚丸
▼ Mr.XRAYさん
> それと,確認ですが,Delphiのバージョン,QuickReportのバーション等の
> 情報ですね.


Delphi2007、QuickReport 5.02
でした。


あと、BeforePrintイベントにも書いてみました。それもだめでした。

repform.QuickRep1.PrinterSettings.ColorOption := 1; //repForm.QuickRep1.UserPrinterSettings.ColorOption;

   repform.QuickRep1.PrinterSettings.OutputBin :=  repForm.QuickRep1.UserPrinterSettings.OutputBin;

[4174] Re17:QuickReportでのプリンタ設定返信 削除
2011/1/8 (土) 16:08:35 Sara
▼ 小豚丸さん ▼ Mr.XRAYさん こんにちは

012_PrintResolutionにある
//  コンボボックスで選択したプリンタで使用可能なビン装置のリストを作成
を利用してBinの番号を調べる

その後、
      QuickRep1.PrinterSettings.CustomBinCode := 259;//上記で調べた番号
      QuickRep1.PrinterSettings.UseCustomBinCode := True;
      QuickRep1.Prepare;
      QuickRep1.Preview;

とすると、希望したトレイから印刷されました。

でも、
      QuickRep1.PrinterSettings.ColorOption := 1;
を間に挟んでも、色は変わりませんでした・・・(^^;

なので、
procedure TForm1.SetDefaultPrinter(Color : Integer);
var
  Device, Driver, Port: array[0..79] of char;
  DeviceMode: THandle;
  DevMode: PDeviceMode;
begin
  //プリンタ名、DEVMODE構造体を取得
  Printer.PrinterIndex := ComboBox1.ItemIndex;
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
  Printer.SetPrinter(Device, Driver, Port, 0);
  Printer.GetPrinter(Device, Driver, Port, DeviceMode);
  if DeviceMode = 0 then begin
    ShowMessage('Printer.GetPrinter エラー');
    Exit;
  end;

  DevMode := GlobalLock(DeviceMode);
  try
    //必要なら、ここで DevModeを修正する
    //↓ B5横 に設定する例
    with DevMode^ do begin
      dmColor := Color;//色指定
    end;
    SetDefaultUsePrinter(Device  {←これが「プリンタ名」です}
                        ,True    {「通常使うプリンタ」に設定する}
                        ,DevMode {DEVMODE構造体を設定する}
                        );
  finally
    GlobalUnlock(DeviceMode);
  end;
end;

を定義して、
その後、
      QuickRep1.PrinterSettings.CustomBinCode := 259;//上記で調べた番号
      QuickRep1.PrinterSettings.UseCustomBinCode := True;
      SetDefaultPrinter(1);
      QuickRep1.Prepare;
      QuickRep1.Preview;
      SetDefaultPrinter(2);
で色と、ビンの変更がうまくいくようです。


[4175] 一件落着かな返信 削除
2011/1/8 (土) 16:41:31 Mr.XRAY
▼ Saraさん,またやってくれましたね.
先日のフォルダ監視といい,今回といい.

> を定義して、
> その後、
>       QuickRep1.PrinterSettings.CustomBinCode := 259;//上記で調べた番号
>       QuickRep1.PrinterSettings.UseCustomBinCode := True;
>       SetDefaultPrinter(1);
>       QuickRep1.Prepare;
>       QuickRep1.Preview;
>       SetDefaultPrinter(2);
> で色と、ビンの変更がうまくいくようです。


しかし,Saraさんには参った.m(_ _)m

ネット上で結構QuickReportのプリンタ関係の設定の質問がありますが,
この[4174] 2011/1/8 (土) 16:08:35 でほとんどうまく行きそうですね.

Saraさんって,本当は,
Mr.XRAYのサイトの記事があぶなかしいので,監視にこられたのでしょうか.
今後のDelphiのことを杞憂して.

しかし,Saraさんといい,たてぐやさんといい,KSCさんといい,ホントに
バグやらとか見つけてくれますよね.


[4176] 一件落着かな返信 削除
2011/1/8 (土) 16:44:29 Mr.XRAY
> >       SetDefaultPrinter(1);

あっ,これ例のせこい方法ですね(笑)


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