プロが教えるわが家の防犯対策術!

教えてください。
フォームに貼り付けているフレームの中身のみをクリップボードにコピーしたいのですが、
それの方法がわかりません。
教えてください。

A 回答 (2件)

クリップボードに渡す前に、ピクチャボックスを利用すると簡単です。



Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

Private Sub Command1_Click()
  Dim picWk    As PictureBox
  Dim bytScale  As Byte
  Dim blnRedraw  As Boolean
  
  'フォームのスケールを一時記憶
  bytScale = Me.ScaleMode
  'AutoRedrawを一時記憶
  blnRedraw = Me.AutoRedraw
  
  
  'フォームのスケールをピクセルにセット
  Me.ScaleMode = vbPixels
  'AutoRedrawをFalseにセット
  Me.AutoRedraw = blnRedraw
  
  'ピクチャボックスを作る
  Set picWk = Me.Controls.Add("VB.PictureBox", "picDmy")
  
  With picWk
    '初期設定
    .ScaleMode = vbPixels
    .Move 0, 0, Frame1.Width, Frame1.Height
    .Cls
    .AutoRedraw = True
    '絵を張る
    Call StretchBlt(.hdc, 0, 0, picWk.Width, picWk.Height, Me.hdc, Frame1.Left, Frame1.Top, Frame1.Width, Frame1.Height, vbSrcCopy)
  End With
  
  'クリップボードにセット
  Clipboard.Clear
  Clipboard.SetData picWk.Image
  
  'ピクチャボックスを破棄
  Me.Controls.Remove picWk
  Set picWk = Nothing
  
  'フォームを元の状態に戻す
  Me.ScaleMode = bytScale
  Me.AutoRedraw = blnRedraw
  
  '適当な色つけ
  Call Form_Load
End Sub

Private Sub Form_Load()
  Me.Frame1.BackColor = RGB(Int(&HFF * Rnd), Int(&HFF * Rnd), Int(&HFF * Rnd))
End Sub
    • good
    • 0
この回答へのお礼

できました。完璧です。
ありがとうございました。

お礼日時:2003/04/03 13:08

デザイン時の話?


CTRLキーを押しながらマウスを操作するべし。

この回答への補足

デザイン時の話ではないです。
プログラム実行中の話です。
実際に行いたいことは、フレームの中に表示されていることを、エクセルを起動して、そこのシートに貼り付けるということを行いたいのです。

補足日時:2003/04/03 12:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!