グラフを印刷する(その4)
                                                        玄関へお回り下さい。
チャートコントロールには、Picture プロパティや Image プロパティが存在しないために、印刷を行う場合には、PrintForm メソッドを使用して、フォーム事印刷を行うか、クリップボードを経由して、Printer オブジェクトを使用して印刷を行います。

1.PrintForm メソッドを使用しての印刷                (022)
     フォームにPicture コントロールを貼り付け非表示にしておいて下さい。
メニューエディターで、印刷のメニュー  mnuPrintNo1 と mnuPrintNo2 のメニューを
作成しておいて下さい。

Private Sub mnuPrintNo1_Click()
'印刷メニューその1
'画面、フォーム、ウィンドウを取り込んで印刷する方法(MSDN のサンプル使用)
  'VB付属ヘルプで「文書番号:J042088」をキーワードに検索して見て下さい。
  '[VB5] 画面、フォーム、ウィンドウを取り込んで印刷する方法 の中の
  '6.新規に追加したモジュールに次のコードを追加します]以下をコピーし
  '標準モジュールに貼り付けて下さい。

  With Picture1
    .AutoSize = True
    .AutoRedraw = True
  Set .Picture = CaptureClient(Me)
  Call sPrint
    .AutoRedraw = False
  End With
End Sub

Picture1.Image の印刷設定

Private Sub sPrint()
  On Error Resume Next
  Dim lngHeight  As Long
  Dim lngWidth   As Long
  Dim sngHZoomRitu As Single
  Dim sngWZoomRitu As Single
  Picture1.ScaleMode = vbTwips
  Printer.ScaleMode = vbTwips
  '用紙サイズをA4に設定
  Printer.PaperSize = vbPRPSA4
  '用紙方向を横向きに設定
  Printer.Orientation = vbPRORLandscape
  'Imageファイルの寸法を取得
  lngHeight = Picture1.Height
  lngWidth = Picture1.Width
  '印刷サイズより画像サイズが大きい場合のみ縮小
  If lngHeight > Printer.Height - 1100 Or lngWidth > _
                      Printer.Width - 1800
Then
    '拡大・縮小率を計算
    sngHZoomRitu = (Printer.Height - 1100) / lngHeight
    sngWZoomRitu = (Printer.Width - 1800) / lngWidth
    '元のサイズの縦横比で用紙いっぱいに拡大・縮小
    If sngHZoomRitu < sngWZoomRitu Then
      lngHeight = lngHeight * sngHZoomRitu
      lngWidth = lngWidth * sngHZoomRitu
    Else
      lngHeight = lngHeight * sngWZoomRitu
      lngWidth = lngWidth * sngWZoomRitu
    End If
  End If
  Printer.PaintPicture Picture1.Image, 800, 400, lngWidth , lngHeight
  Printer.EndDoc   ' 印刷開始
End Sub
2.クリップボード経由の印刷                (022)
       一度クリップボードにイメージをコピーしてから、ClipBoard オブジェクトを利用して、再び、Visual Basic にイメージをコピーする必要があります。

Private Sub mnuPrintNo2_Click()
'印刷メニューその2
  Dim tmpPic As New StdPicture
  'クリップボードにコピー
  MSChart1.EditCopy
  'クリップボード内のイメージを読込
  Set tmpPic = Clipboard.GetData()
  '指定位置に印刷
  Printer.PaintPicture tmpPic, Printer.CurrentX, Printer.CurrentY
  Printer.EndDoc
  '点数等の文字が横向き印刷になる
End Sub

Form1.PrintForm での印刷は文字等が正常に印刷されない場合があります。
詳しくはMSDNで「文書番号: J051302」を見て下さい。

MSChart コントロールの EditCopy メソッドを使ってチャートをクリップボードに取り込んだ場合、系列の縁取りの色、スタイル、凡例、表題の文字などが正しく取り込まれない場合があります
こちらも上記同様MSDNで調べて下さい。

この他ハードコピーをとる方法もあります




2002/04/23