MSFlexGridのカラー印刷
                                                            玄関へお回り下さい。
MSFlexGridのカラー印刷(Pictureに表示してPictureを印刷)その1       (039)
     Private Sub Command10_Click()
  Dim frmLeft  As Long
  Dim frmTop  As Long
  Dim frmWidth As Long
  Dim frmHeight As Long
  Dim frmbakcol As Long
  Dim mfgLeft  As Long
  Dim mfgTop  As Long
  Dim mfgWidth As Long
  Dim mfgHeight As Long

  '元の位置とサイズを取得
  With Form1
    frmbakcol = .BackColor
    frmLeft = .Left
    frmTop = .Top
    frmWidth = .Width
    frmHeight = .Height
    'フォームをグリッドの大きさに合せる
    .Move 0, 0, MSFlexGrid1.Width + 150, MSFlexGrid1.Height + 850
    .BackColor = QBColor(15)
  End With
  With MSFlexGrid1
    mfgLeft = .Left
    mfgTop = .Top
    mfgWidth = .Width
    mfgHeight = .Height
    '表示位置を左上に
    .Move 0, 0
  End With
  DoEvents

      '画面、フォーム、ウィンドウを取り込んで印刷する方法(MSDN のサンプル使用)
  With Picture1
    .AutoSize = True
    .AutoRedraw = True


  Set .Picture = CaptureClient(Me)

  'MSDNの「 文書番号: JP161299」を見て下さい。
  '[6.新規に追加したモジュールに次のコードを追加します] 以下をコピーし
  '標準モジュールに貼り付けて下さい。


  Call sPrint
    .AutoRedraw = False
  End With
  DoEvents

  '元の位置とサイズに戻す
  Form1.Move frmLeft, frmTop, frmWidth, frmHeight
  MSFlexGrid1.Move mfgLeft, mfgTop, mfgWidth, mfgHeight
  Form1.BackColor = frmbakcol
  DoEvents

End Sub


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


    印刷結果
    
MSChart コントロールの印刷同様MSDNの「文書番号: JP161299に掲載されているサンプル
を使用して PictureBox コントロール内に フォームイメージを取り込んでイメージを印刷します
MSFlexGridの表示サイズに合せてフォームを表示しております。
印刷したい範囲をMSFlexGridのサイズを変えて印刷して下さい。

   MSFlexGridのカラー印刷(Pictureに表示してPictureを印刷)その2       (039)

私も知らなかったのですが MSFlexGrid1.Picture を使用することでMSFlexGridのスナップショットが取れます。それをクリップボードやPictureコントロールに設定することで
単に印刷することができます。(VB5.0 VB6.0 でOKです)

Private Sub
Command11_Click()
  With MSFlexGrid1
    .TopRow = .FixedRows  '用紙に入らない場合はここを変更
    .LeftCol = .FixedCols  'して2枚目に印刷して下さい
    .PictureType = flexPictureColor '高品質のカラー

  End With

  With Picture1
    .AutoSize = True
    .AutoRedraw = True
    'PictureコントロールへMSFlexGrid1のスナップショットを送ります
    .Picture = MSFlexGrid1.Picture
    Printer.PaintPicture .Image, 800, 400, .Width, .Height
    Printer.EndDoc
    .AutoRedraw = False
  End With
End Sub

上記どちらの方法も画面イメージを印刷しております。従って文字等は綺麗に印刷されませんし、画像
としての印刷設定しか出来ません。
綺麗に印刷したい場合や細かい設定で印刷したい場合は、データを印刷する(罫線・改ページ処理
含む)(No.3)のように地道にコードを書いて下さい。




2002/05/05