用紙サイズを指定して出力するには?

解決


どら  2007-12-27 01:29:44  No: 29106

下記の処理を実行するとA4で出力されるのですが
用紙サイズをA3に指定して出力することは可能でしょうか?
現在はtxtファイルはメモ帳に関連付けられていますが
可能であれば別の色々なアプリケーションに関連付けられたファイルにも
応用していきたいと思っています。

uses ShellApi

procedure TForm1.Button1Click(Sender: TObject);
var
  SXInfo: TShellExecuteInfo;
begin
  with SXInfo do
  begin
    cbSize := SizeOf(SXInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Application.Handle;
    lpVerb := 'Print';
    lpFile := PChar('C:\TEST.TXT');
    lpParameters := Nil;
    lpDirectory := Nil;
    nShow := SW_SHOW;
  end;
  ShellExecuteEx(@SXInfo);
end;


Ru  2007-12-27 02:16:48  No: 29107

予めプリンタ設定変更しないと出来ない気がします。
DEVMODE構造体で変更はできます。
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=037541
探せばまだサンプルはあると思います。
プリンタの変更は色々複雑みたいですが・・・


Mr.XRAY  URL  2007-12-28 08:44:25  No: 29108

どのような目的というか意図なのかはわかりませんが,

ShellExecuteEx(lpVerb := 'Print')で印刷する場合,対象となるアプリの文書などが
プリンタ関係の設定(用紙サイズや印刷の方向)を保存するようなものである場合,
その設定が使われます.
そうでないと(変更可能にしていまうと),ワード等で作成した文書をShell....で印刷
した時にエンドユーザの予期せぬ印刷結果となってしまいます.
(ワードの文書で用紙設定をする意味が少しなくなります)

また,そのようなアプリの文書類でない時は,通常使用するプリンタ(でその設定)が使用
されます.

Delphiのコードで印刷のプログラムを書く場合は,単にプリンタを指定して,そのプリ
ンタのDEVMODE構造体(TPritnerオブジェクトにないものは) を設定すればいいのですが,
ShellExecuteEXで印刷の際,どうしても変更したい場合は,一時的にシステムのプリンタ
の設定を変更する必要があります.

システムのプリンタの変更方法は,以下を参考にしてみてください.
これは「通常使用するプリンタに設定する」となっていますが,実行すべき内容は,この
記事そのものです.
このコードは WindowsXP(SP2) + Delphi5 で動作することを確認しています.

http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00614.html


どら  2008-01-07 18:47:34  No: 29109

返事が遅くなり申し訳ありません。
Mr.XRAYさんに提示していただいたリンクを元にコーディングしたところ
こちらの意図していた動作を実現することが出来ました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加