AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
Delphi2010 ページ設定の画面 2010/11/07
 
前回は[Dialogs]内の「ReplaceDialog」(「置換」画面)について見ましたので今回も同じく[Dialogs]内の「PageSetupDialog」(「ページ設定」画面)をみてみます。「ページ設定」画面は Delphi6 にはありません。

 
「テスト21」を開いて、ボタン[ページ設定](Button8)を追加しておき、この「ページ設定」画面 PageSetupDialog を配置してみます。1つ目ですので Nameプロパティは「PageSetupDialog1」となります。アイコン絵となりますが実行時には「ページ設定」画面が表示されます。

 
「ページ設定」画面は、印刷を行う前に、どういうレイアウトにするのかをプレビュー表示させるのに利用されると思われます。画面は小さいので全体としての割合をはかるには良いですが詳細プレビュー画面としての利用は難しいでしょう。
ボタン[ページ設定](Button8)をクリックした時の処理を記述します。値がどのように入るのか?の確認表示を入れています。uses節に「Printers」を追加します。
procedure TForm1.Button8Click(Sender: TObject);
var
 s : string ;
begin
 PageSetupDialog1.Execute ;
 s := '印刷領域' ;
 s := s + ' 横:'+IntToStr(Printer.PageWidth ) + 'dot' ;
 s := s + '×縦:'+IntToStr(Printer.PageHeight) + 'dot' + #13+#10;
 s := s + 'マージン' ;
 s := s + ' 左:' + IntToStr(PageSetupDialog1.MarginLeft) ;
 s := s + ' 右:' + IntToStr(PageSetupDialog1.MarginRight) ;
 s := s + ' 上:' + IntToStr(PageSetupDialog1.MarginTop) ;
 s := s + ' 下:' + IntToStr(PageSetupDialog1.MarginBottom) + #13+#10;
 s := s + '用紙サイズ' ;
 s := s + ' 横:' + IntToStr(PageSetupDialog1.PageWidth) ;
 s := s + '×縦:' + IntToStr(PageSetupDialog1.PageHeight) ;
 ShowMessage(s);
end;
これでとりあえず保存・コンパイル(再構築)・実行を行います。

[ページ設定]ボタンをクリック


「ページ設定」画面が表示されます


テキトウに設定を変えてみて[OK]クリック


確認表示
 
他の「印刷」「検索」画面などと同様、「ページ設定」画面を表示(実行)するには Executeメソッドを利用します。
 
ここでは表示されませんがプリンタ名、プリンタの用紙サイズ、給紙方法、向き、というのは、[印刷]画面(のプリンタのプロパティ)や[印刷設定]画面で設定した内容が反映されるようです。
デフォルト状態では、入力した余白(マージン)値は、再度[ページ設定]ボタンをクリックした時に元の値に戻ってしまいますので、Optionsプロパティの psoMarginsを「True」にしておけば余白(マージン)値は保持されるようです。
 
という訳で、以下のプロパティがあります。
 余白(マージン)値最小値
MarginLeftMinMarginLeft
MarginRightMinMarginRight
MarginTopMinMarginTop
MarginBottomMinMarginBottom
各余白値の初期値は「2500」となっています。各最小値の初期値は使用プリンタでのマージン最小値となります。自分で最小値を指定したい場合は Optionsプロパティの psoMinMarginsを「True」にします。これらの値の単位は、Unitsプロパティで指定します。以下、ヘルプより。
pmDefaultユーザーは,ロケール設定で決められた単位で値を指定する必要があります。(デフォルト)
pmMillimetersユーザーは,ミリメートルで値を指定する必要があります。
pmInchesユーザーは,インチで値を指定する必要があります。
ミリメートル指定の場合は1/100mm単位での指定(例:1mm→100と指定)、インチ指定の場合は 1/1000inch単位での指定となります。
※なお、ここで指定した余白値は、Printerオブジェクトでの印刷領域には考慮されません。印刷プログラムでは自分で余白等を考慮して計算して印刷を行う必要があります。
 
 
用紙サイズ(余白を考慮しない:印刷領域ではなく指定用紙の大きさ)は、PageWidthプロパティで横サイズ、PageHeightプロパティで縦サイズ、を取得する事が出来ます。用紙の向きが考慮されます。単位は上記の余白と同じです。
 
 
印刷プレビュー画面には、デフォルトでなにやら文字が表示されていますが、ここに自分で描画コードを記述して、自分の思うような描画を行わせることが出来ます。そのタイミングとしては、下記(ヘルプより)のどのイベントに記述するかで指定出来ます。
BeforePaint描画を開始する前。他のイベント ハンドラの値を初期化するために使用します。
OnDrawFullPageフル ページを描画する前。
OnDrawMinMargin最小マージンを描画する前。
OnDrawMarginマージンを描画する前。
OnDrawGreekText"ギリシャ語" テキストを描画する前。
OnDrawEnvStampスタンプを描画する前(エンベロープ用紙タイプのみ)。
OnDrawRetAddress戻りアドレスを描画する前(エンベロープ用紙タイプのみ)。
例えば、以下の OnDrawFullPageイベントハンドラを記述します。
procedure TForm1.PageSetupDialog1DrawFullPage(Sender: TObject; Canvas: TCanvas; PageRect: TRect; var DoneDrawing: Boolean);
begin
 Canvas.Brush.Color := clBlue ;
 Canvas.Pen.Color := clRed ;
 Canvas.Rectangle(PageRect);
 DoneDrawing := True ;   // デフォルトの描画を行わないように
end;
これを実行すると

という具合になります。但しこれだと余白の具合が全く分かりません。なにやら文字の代わりに描画を行いたいので、OnDrawGreekTextイベントハンドラを記述します。
procedure TForm1.PageSetupDialog1DrawGreekText(Sender: TObject; Canvas: TCanvas; PageRect: TRect; var DoneDrawing: Boolean);
begin
 Canvas.Brush.Color := clBlue ;
 Canvas.Pen.Color := clRed ;
 Canvas.Rectangle(PageRect);
 DoneDrawing := True ;   // デフォルトの描画を行わないように
end;
これを実行すると

という具合になります。このイベントの引数 PageRect は余白を考慮した範囲になるようなので好都合です。この領域は小さいですが、縮小率を計算して、それを掛けてCanvasに縮小プレビューを表示するようにすれば、利用者には分かりやすくなると思われます。実際の印刷部分のコーディングは、ここで指定した余白分と、プリンタの用紙サイズ・印刷領域サイズとその左上点とを考慮し計算して印刷プログラムを作成する必要があると思われます。
 
プリンタの解像度(DPI)は、
  横:GetDeviceCaps(Printer.Handle, LOGPIXELSX)
  縦:GetDeviceCaps(Printer.Handle, LOGPIXELSY)
プリンタのオフセット値(dot)は、
  横:GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX)
  縦:GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY)
プリンタの印刷領域サイズ(dot)は、
  横:Printer.PageWidth
  縦:Printer.PageHeight
で取得できます。
 
印刷は、Printer.Canvas に対して、プリンタのドット(ピクセル)値で指定する事になりますので、作図したい図形等のmm値をドット値に変換する必要があります。
  (dot値)=(mm値)×(DPI値)÷25.4
プリンタ/プリンタ設定によっては、横のDPI値と縦のDPI値が異なる場合もありますので注意して下さい。
 
 
「ページ設定」画面の Optionsプロパティは、その外観や動作状態・状態取得などを行う事が出来ます。以下ヘルプより。
psoDefaultMinMarginsページマージンについてユーザーが指定できる最小値をプリンタが許容する最小マージンに設定します。
psoDisableMarginsマージンのコントロールを使用不可にし,ユーザーがマージンを設定することを抑止します。
psoDisableOrientation方向のコントロールを使用不可にし,ユーザーがページの方法を設定することを抑止します。
psoDisablePagePaintingデフォルトのサンプルページの描画を抑止します。イベントの呼び出しは無効にしません。
psoDisablePaper用紙のコントロールを使用不可にし,ユーザーがページのサイズや給紙トレーなどのページパラメータを設定することを抑止します。
psoDisablePrinter[プリンタ]ボタンを使用不可にし,ユーザーが追加の設定情報を含むダイアログボックスを表示することを抑止します。
psoMarginsMarginLeft,MarginRight,MarginBottom,および MarginTop プロパティからマージンの初期値を設定します。これらの値が設定されていない場合,マージンの初期値はそれぞれ 1 インチになります。
psoMinMarginsMinMarginLeft,MinMarginRight,MinMarginBottom,および MinMarginTop からマージンの最小値を設定します。これらの値が設定されていない場合,マージンの最小値はプリンタドライバによって決定されます。
psoShowHelp[ヘルプ]ボタンと[ヘルプ]タイトルバーボタンを表示します。
psoWarningデフォルトのプリンタがない場合に警告を表示しないようにします。
psoNoNetworkButton[ネットワーク]ボタンを隠し,無効にします。
 
 
<オブジェクトインスペクタ>での内容は以下のようになっています。

 

 
 
これにて[Dialogs]内のコンポーネント紹介は終了です。
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/11/06
 2010/11/07
▼2010/11/08
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.