1

アプリケーションで TPrintDialog を使用しています。印刷する前に、ユーザーにダイアログでプロンプトを表示し、ユーザーは必要な設定を変更してから をクリックしますOK

問題は、アプリケーションを閉じて再起動すると、ページ サイズが以前に選択した (レター) と同じではなく、A4 に設定されていることです。これは Windows の問題ですか? これは Windows XP SP3 (32 ビット) で発生し、Windows 7 Ultimate (64 ビット) では逆のことが起こります。デフォルトでは、ページ サイズの [レター] が選択され、ユーザーが A4 を選択してアプリケーションを閉じると、再起動すると [レター] が選択されます。

4

1 に答える 1

2

OS は、アプリケーションのプリンター設定を維持するために何もしません。デフォルト設定のみを維持します。同様に、VCL はこの点に関して何の努力も示していません。アプリケーションの起動後に初めてプリンタが必要になると、その特定のプリンタのデフォルト設定が取得されます。そのため、設定を保存して適用する方法を実装する必要があります。

印刷ダイアログを表示する前に、用紙の種類を「レター」に設定する簡単なコードを次に示します。

var
  Device: array[0..540] of Char;
  Driver, Port: array[0..1] of Char;
  DevMode: THandle;
  PDevMode: PDeviceMode;
begin
  Printer.GetPrinter(Device, Driver, Port, DevMode);
  PDevMode := GlobalLock(DevMode);
  PDevMode.dmPaperSize := DMPAPER_LETTER;
  Printer.SetPrinter(Device, Driver, Port, DevMode);
  GlobalUnlock(DevMode);

  PrintDialog1.Execute();
end;


同様に、DeviceMode 構造体から用紙の種類やその他の設定を取得し、後で使用するためにアプリケーションを閉じるときにレジストリ fi に保存できます。

于 2012-09-15T00:02:29.427 に答える