Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


756 / 13645 ツリー ←次へ | 前へ→

【78514】ユーザーフォーム上の画像保存方法 ゆうじん 16/10/25(火) 18:25 質問[未読]
【78515】Re:ユーザーフォーム上の画像保存方法 β 16/10/25(火) 19:08 質問[未読]
【78516】Re:ユーザーフォーム上の画像保存方法 ゆうじん 16/10/25(火) 20:10 発言[未読]
【78517】Re:ユーザーフォーム上の画像保存方法 β 16/10/25(火) 20:59 発言[未読]
【78518】Re:ユーザーフォーム上の画像保存方法 ゆうじん 16/10/26(水) 8:33 発言[未読]
【78519】Re:ユーザーフォーム上の画像保存方法 ゆうじん 16/10/26(水) 11:28 お礼[未読]

【78514】ユーザーフォーム上の画像保存方法
質問  ゆうじん  - 16/10/25(火) 18:25 -

引用なし
パスワード
   お世話になっております。

ユーザーフォームにImageコントロールを配置し、画像を表示させています。
その画像の上にテキストボックスを重ねて配置しております。
この状態をJPEG形式で保存したいのですが、どうすれば実現できますでしょうか。
イメージ的には、画像のハードコピーをとるような感じです。

以下の方法を試してみましたが、画像のみが取得されました。
SavePicture UserForm1.image1.Picture, "C:\hoge.jpg"

よろしくお願いいたします。

【78515】Re:ユーザーフォーム上の画像保存方法
質問  β  - 16/10/25(火) 19:08 -

引用なし
パスワード
   ▼ゆうじん さん:

>以下の方法を試してみましたが、画像のみが取得されました。

はい。これはImage1の中の画像を名前を付けて保存しているコードですが
それでは

>イメージ的には、画像のハードコピーをとるような感じです。

という目的に合わないのですか?

何を画像として保存したいのでしょう?
ユーザーフォーム全体ですか?

【78516】Re:ユーザーフォーム上の画像保存方法
発言  ゆうじん  - 16/10/25(火) 20:10 -

引用なし
パスワード
   ▼β さん:

>何を画像として保存したいのでしょう?
>ユーザーフォーム全体ですか?

チェックボックスと画像が重なって写っているものを画像として保存したいです。
ユーザーフォーム全体ではなく、画像の箇所のみが欲しいです。

>はい。これはImage1の中の画像を名前を付けて保存しているコードですが

だから、チェックボックスが写っていない画像だったのですね。

説明が下手で申し訳ありません。

【78517】Re:ユーザーフォーム上の画像保存方法
発言  β  - 16/10/25(火) 20:59 -

引用なし
パスワード
   ▼ゆうじん さん:

どうなんでしょうね。

Imageコントロールでは難しいかもしれません。
かといって、そのあたり、素人ですので詳しくないのですが
Frameコントロールであれば、コンテナとして、その上に配置した TextBox等も
内包します。

Frameのハンドルは

Private Declare Function WindowFromAccessibleObject Lib "oleacc" ( _
   ByVal pacc As Object, _
   ByRef phwnd As Long) As Long

を宣言しておいて

  WindowFromAccessibleObject Frame1, hwnd

等で、変数 hwnd に取得できます。

このハンドルからFrameウィンドウを取得して、そのウィンドウの画面キャプチャを行えば
なにかしら、元画像と、その上にある TextBox が含まれたイメージを取得できると思います。

ただ、申し上げたように、そのあたり詳しくないので。

「vba api windowのキャプチャー」あたりで検索すると参考ページもでてくるとは
思いますが。

これ以上のお手伝いは、私には無理なので、上級者さんの回答をお待ちください。

【78518】Re:ユーザーフォーム上の画像保存方法
発言  ゆうじん  - 16/10/26(水) 8:33 -

引用なし
パスワード
   ▼β さん:

やはり難しいですか・・・

一度、Frameを使ってみます。
ご回答ありがとうございました。

【78519】Re:ユーザーフォーム上の画像保存方法
お礼  ゆうじん  - 16/10/26(水) 11:28 -

引用なし
パスワード
   ▼β さん:
Frameを使用して、目的の画像を保存することができました。
βさん!本当にありがとうございました!!

以下のサイトを参考にしました。
ht tps://support.microsoft.com/ja-jp/kb/161299
キャプチャの対象をFrameのハンドルにすることで解決できました。

Public Function CaptureFrame() As IPictureDisp
  ' Get a handle to the Frame1.
  Dim hWndScreen As Long
  WindowFromAccessibleObject Frame1, hWndScreen
  
  Dim cxScreen As Long, cyScreen As Long
  cxScreen = Frame1.Width
  cyScreen = Frame1.Height
  
  ' Call CaptureWindow to capture the entire frame give the handle
  ' and return the resulting Picture object.
  Set CaptureFrame = CaptureWindow(hWndScreen, False, 0, 0, cxScreen, cyScreen)
End Function

756 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free