プリンタのプロパティを表示させて、その変更内容を更新させる方法が
わからないので、教えていただきたいです。
プリンタのプロパティ画面は以下のサイトを参考にすると開けました。
http://forum.nifty.com/fdelphi/samples/00613.html
変更後、プロパティ画面を閉じ、再度画面を開くと先ほどの
変更内容が反映されていません。
つまらない質問かもしれませんが、ご教授願います。
やってみました.プリンタの選択と,DevModeの修正部分を除いたコード
をButtonクリックで実行しました.
ダイアログで変更した後,ダイアログを閉じて,またボタンをクリック
しました.変更内容が反映されていました.
WindowsXP(SP2) + Delphi5(Pro)で確認しました.
もう一度してみましたが、やっぱり
設定できてませんでした。
こちらの環境はWin2000(Pro)+Delphi6(Personal)です。
他の方法でできる方法はないのでしょうか??
どんなコードでテストしたのですか?
私のテストしたコードです.環境は前回のレスの通りです.
var
Device,Driver,Port: array[0..512] of Char;
DeviceMode : THandle;
//====================================================================
// プリンタのプロパティダイアログを表示
// usesにPrinters,WinSpoolが必要
// ダイアログで設定した内容が,次回表示にも反映される.
// ただし,当然であるが,プログラムを終了すれば元に戻る
//====================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
DevMode : PDeviceMode;
begin
Printer.GetPrinter(Device,Driver,Port,DeviceMode);
DevMode :=GlobalLock(DeviceMode);
try
DocumentProperties(Application.Handle,
0,
Device,
DevMode^,
DevMode^,
DM_PROMPT or DM_MODIFY or DM_COPY);
finally
GlobalUnlock(DeviceMode);
end;
end;
>他の方法でできる方法はないのでしょうか??
とんな様にしたかわかりませんと,なんとも検討のしようがありません
からね.わたしは神様でもサンタクロースでもないので,Booさんが実行
したことはわかりません.
できました。Mr.XRAY さんありがとうございます。
おそらく、毎回デフォルトの設定に戻していたのかと思います。
以下にできなかったコードを記します。
var
Device, Driver, Port: array[0..79] of char;
DeviceMode: THandle;
procedure TForm1.Button1Click(Sender: TObject);
var
DevMode: PDeviceMode;
begin
if ComboBox1.ItemIndex < 0 then begin
Exit;
end;
Printer.PrinterIndex := ComboBox1.ItemIndex;
Printer.GetPrinter(Device, Driver, Port, DeviceMode);
//以下の2行が間違いだと思います。
Printer.SetPrinter(Device, Driver, Port, 0);
Printer.GetPrinter(Device, Driver, Port, DeviceMode);
//Mr.XRAYさんのコードにはありませんでした。
DevMode := GlobalLock(DeviceMode);
try
DocumentProperties(Application.Handle,
0,
Device,
DevMode^,
DevMode^,
DM_PROMPT or DM_MODIFY or DM_COPY);
finally
GlobalUnlock(DeviceMode);
end;
end;
>Printer.PrinterIndex := ComboBox1.ItemIndex;
プリンタを指定するこのコードですと,そのプリンタのデフォルトの設定
に戻ってしいます.
この部分だけ削除してやってみて下さい.
私のコードはGetPrinterが1行だけの手抜きコードとなっていますが,
//現在のプリンタの設定を取得
Printer.GetPrinter(Device, Driver, Port, DeviceMode);
Printer.SetPrinter(Device, Driver, Port, 0);
Printer.GetPrinter(Device, Driver, Port, DeviceMode);
の方が確実です.Booさんが参照したURLのSample蔵に解説したサンプルが
あったと思います.
ツイート | ![]() |