Delphi Programming / Object Pascal
[掲載 2000年05月07日] [更新 2016年04月20日] プリンタ設定コンポーネント |
プリンタ設定コンポーネント
用紙と解像度関係のプロパティ |
動作確認等 |
図は Windows 7 U64(SP1) + Delphi XE(UP1) Pro で作成 |
凡例 |
■ published
□ public
▲ ReadOnly |
用紙サイズ等のプロパティです.これらの値はドット数です.
これらの値は,一般的に,プリンタあるいはプリンタドライバによって違う値になります.また,用紙サイズとプリンタの解像度によっても異なる場合があります.
オフセットの範囲外に描画コードを書いてもクリップされて印刷できません.これは,プリンタの物理的な特性によるものです.
|
[備考]
右端と下端のオフセットの定義が,一般的に使用されている用語と意味が違っています.
既にこのコンポーネントを利用したアプリケーションを多く作成してしまっているため,変更の予定はありません.ご了承下さい. |
|
図1
用紙サイズとページの幅と高さ
- ページ幅と高さは,印刷する用紙サイズによって異なる
- 同じ用紙サイズでも,プリンタによって違うことがある
|
|
図2
オフセット値
- 点線の内側が描画可能 (印刷可能) 領域
- オフセット値は,プリンタによって異なる
- 左と上のオフセット値も,使用する用紙によっても異なる場合がある
|
□ Orientation |
TPrinterOrientaion |
印刷方向.取得,設定とも以下の値
これらの定数の使用には uses に Printers が必要
poPortrait 縦
poLandscape 横 |
□ PaperName |
String |
用紙サイズ名称
用紙サイズの名称は,プリンタドライバによって,例えば同じ A4 でも異なる場合がある |
□ PaperNumber |
Integer |
用紙サイズ番号
一般的に識別子で指定する
[例]
DMPAPER_A4 (A4シート、 210×297 ミリメートル) |
▲ PaperWidth |
Integer |
用紙幅のドット数 |
▲ PaperHeight |
Integer |
用紙長さのドット数 |
▲ PageWidth |
Integer |
印刷可能な横方向のドット数 (頁幅) |
▲ PageHeight |
Integer |
印刷可能な縦方向のドット数 (頁長さ) |
▲ LeftOffset |
Integer |
用紙左端オフセット値.ドット数 |
▲ TopOffset |
Integer |
用紙上端オフセット値.ドット数 |
▲ RightOffset |
Integer |
印刷可能な右端ドット数 |
▲ BottomOffset |
Integer |
印刷可能な下端ドット数 |
横方向のドット数と解像度から,選択した用紙の幅を 0.1 mm と 0.01 inch 単位の値に換算して,それぞれの変数に代入する例です. |
procedure TForm1.Button3Click(Sender: TObject);
var
LPaperWmm : Integer;
LPaperWinch : Integer;
begin
//0.1mm単位に換算
LPaperHmm := Trunc(plSetPrinter1.PaperWidth * 254.0 / plSetPrinter1.XResolution);
//0.01inch単位に換算
LPaperHinch := Trunc(plSetPrinter1.PaperWidth * 100.0 / plSetPrinter1.XResolution);
end;
縦方向のドット数と解像度から,選択した用紙の長さを 0.1 mm と 0.01 inch 単位の値に換算してそれぞれの変数に代入する例です. |
procedure TForm1.Button2Click(Sender: TObject);
var
LPaperHmm : Integer;
LPaperHinch : Integer;
begin
//0.1mm単位に換算
LPaperHmm := Trunc(plSetPrinter1.PaperHeight * 254.0 / plSetPrinter1.YResolution);
//0.01inch単位に換算
LPaperHinch := Trunc(plSetPrinter1.PaperHeight * 100.0 / plSetPrinter1.YResolution);
end;
これらのプロパティは,プリンタの 1 インチあたりのドット数を返します.プリンタによっては複数の解像度を持つもの,また横と縦 (長さ) 方向で解像度が異なる場合もあります. |
▲ XResolution |
Integer |
横方向の解像度 |
▲ YResolution |
Integer |
縦方向の解像度 |
プリンタドライバによって設定の方法が違う場合があります.解像度を直接指定できるものと,印刷の品質名称で変更するものがあります.
正確には印刷の品質と解像度とは違い,同じ解像度でも印刷品質を向上させているプリンタもあるようです.実際の解像度は,プロパティで知ることができます. |
|
図3
プロパティ設定ダイアログの [詳細設定]
- グラフィックスの項目の [印刷品質]
- 横×縦の解像度のリストがある
|
用紙サイズや解像度取得の注意 ( 複数使用の場合 ) |
このページで説明している読出し専用のプロパティ,用紙幅、長さや解像度は,取得時のプリンタの現在の設定値となります.
本コンポーネントを複数個使用して,別々の設定内容とした場合,別の設定に切替えるには,以下のように,CallSetting を実行してプリンタ (コンポーネントの設定) を切替えて下さい.あるいは,設定内容をファイルに保存して,必要な時に呼出します.そのためのメソッドを用意しています.
システムで有効なプリンタオブジェクトは 1 つだけです.複数のプリンタオブジェクトを同時に有効にすることはできません.
|
procedure TForm1.Button1Click(Sender: TObject);
var
LPaperWidth1 : Integer;
LPaperWidth2 : Integer;
LDPI1 : Integer;
LDPI2 : Integer;
begin
//ここで現在のプリンタがplSetPrinter1のものになる
plSetPrinter1.PaperNumber := DMPAPER_B5;
//plSetPrinter1(現在)のプリンタの値が取得されてしまう
LPaperWidth1 := plSetPrinter2.PaperWidth;
LDPI1 := plSetPrinter2.XResolution;
Panel1.Caption := IntToStr(LPaperWidth1);
Panel2.Caption := IntToStr(LDPI1);
//plSetPrinter2にプリンタを切換ればOK
//CallSettingはプリンタの切換を行うので少し時間がかかる.多用は禁物
plSetPrinter2.CallSetting;
//plSetPrinter2のプリンタの値が取得される
LPaperWidth2 := plSetPrinter2.PaperWidth;
LDPI2 := plSetPrinter2.XResolution;
Panel3.Caption := IntToStr(LPaperWidth2);
Panel4.Caption := IntToStr(LDPI2);
end;
|