名前 題名 ▼ takiさん > ▼ Mr.XRAYさん > > > 今読み直してみたんですが, > > 実は [011] のサンプルは,DEVMODE 構造体から取得可能な値をリストするものです. > > > > > で,印刷の時の用紙のサイズの取得は, > > > > [012_プリンタの解像度と用紙サイズ等の取得] > > http://mrxray.on.coocan.jp/Delphi/plSamples/012_PrintResolution.htm > > > > を参考にしてくださいませ. > > 意味が違っていたらゴメンなさいです. > > マスター 誠にすみません。 > マスターのご指摘のように > GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);で > 常に正しい情報を得ることができました。 > > それと、私がしくじった原因も報告します。 > > 以下のコードで試しました。 > > uses Printers; > > procedure TForm1.GetNagasa; > var > TempInt,YDPI: Integer; > TempDouble : Double; > begin > YDPI := GetDeviceCaps(Printer.Handle, LOGPIXELSY); > TempInt := GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT); > TempDouble := TempInt * 25.4 / YDPI; > label2.Caption := Format('%8.1f [mm]', [TempDouble]); > end; > > procedure TForm1.Button1Click(Sender: TObject); > begin > // Printer.PrinterIndex := -1; // ←間違った使い方1 > if PrinterSetupDialog1.Execute then begin > // OKで閉じるまでに用紙の種類を変更する > GetNagasa; > end; > end; > > procedure TForm1.Button2Click(Sender: TObject); > begin > // Printer.PrinterIndex := -1; // ←間違った使い方2 > GetNagasa; > end; > > 確実にデフォルトのプリンターを使おうとしてPrinterIndex := -1;を > コーディングしたのが間違いでした。 > > 色々試した結果、PrinterIndex := -1;とすると、デフォルトの > プリンターが選ばれるだけでなく、デフォルトの状態も設定されるようです。 > つまり私の環境の場合、 > プリンター名 「Canon MG5400 series Printer」 > 用紙サイズ 「A4」 > 印刷の向き 「縦」 > に戻ってしまうようです。 > > それぞれの間違った使い方のコードが有効な状態で試すと > Button1をClickすると、PrinterSetupDialogを開くたびにA4・縦になる。 > しかし、用紙の縦の長さは変化する。(変更した正しい長さになる。) > Button2をClickすると、常にA4用紙の縦の長さ297mmに戻ってしまう。 > > それぞれのコードをコメントアウトすると > Button1をClickすると、PrinterSetupDialogは以前の状態が保持されている。 > 変更した用紙の紙の長さも正常に表示される。 > Button2をClickしても、用紙の紙の長さは変わらない。 > > 出入り禁止にはしないでください。m(__)m GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link