Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2013)
WebBrowserの背景について
投稿日時: 18/01/26 21:14:23
投稿者: さむさむ

いつもお世話になっています。
前回のWebBrowserの質問では大変お世話になりました。
大変恐縮なのですが、再度ご質問をさせていただきご教示をお願いいたします。
 
フォームに配置したコントローラの多くがBackStyleを透過にさせることができます。
WebBrowserコントローラについて同じように枠のない透過スタイルにできないか
と思っています。
 
本来なら前回の関連質問を自分で解決し考えていくものだとは思うのですが、
敷居があまりにも高すぎると思っています。
 
すみません。ご教示お願い致します。

回答
投稿日時: 18/01/27 18:45:42
投稿者: Abyss2

フォームに配置したコントローラの多くがBackStyleを透過にさせることができます。 
WebBrowserコントローラについて同じように枠のない透過スタイルにできないか 
と思っています。 

WebBrowserはHTMLっていうScript言語でUserInterfaceを管理していますから、
Windowsの部品とは扱いが異なります。
  
ただ、WebBrowserのbody部分の色をUserFormの背景色に指定する事で「透過」効果を
得る事になるでしょうね。

投稿日時: 18/01/27 19:28:35
投稿者: さむさむ

Abyss2さん 何時もご教示ありがとうございます。
 
言われている 疑似的効果-UserFormのBackColorを白くして、WebBrowserの透明にしたい部分の色(白)を同一化して‐を得るようにしました。今回のコードではWebBrowserそのものがUserformの中で移動します。そのほかにLoadPictuerしたラベルも配置していて、その部分にかかってしまいます。
 
コントローラーのZorder?を前・後させればいいのかと思い、WebBrowserを後ろに配置するように行ったのですが、動かすとWebBrowserが前になりWebBrowserコントローラーが被さってしまいます。
 
いろいろ調べていたら下記のサイトにあたりヒントになりそうだと思うのですが、VB.netからの移植では私には手に負えないなといったとところです。
API関数の処理がたぶん必要なのと、コードも書き換えなければいけないのだろうなというところまでは艦居ています。
http://www.atmarkit.co.jp/ait/articles/1510/21/news025.html
 
できればご教示いただきたいのですが。

回答
投稿日時: 18/01/28 01:43:56
投稿者: Abyss2

少し整理させてください。
 
今回のWebBrowserコントロール実装の目的は下記で間違いないですか?
 
1)Animation GIFをUserForm上に表示する。
2)Timerなどを利用し、Animation GIFをUserForm上移動させる。
3)移動時には、既存のコントロールの後ろを通過してほしい。

投稿日時: 18/01/28 08:56:22
投稿者: さむさむ

 Abyss2さん ありがとうございます。
整理されてご提示いただいたプロセスで解決できればと思っています。

回答
投稿日時: 18/01/29 00:15:45
投稿者: Abyss2

1)Animation GIFをUserForm上に表示する。

Animation GIFをUserForm上表現するにはWebBrowserが便利とも思えますが、
本来の目的とは違いますね。右クリックのContextメニューとか今回のケースには
必要もない機能がついてますので。(右クリックメニュー表示は、前回提示コードから
ShowContextMenu関数の戻り値を0(S_OK)にすれば抑えられます。)
そもそもVBE付属のWebBrowserコントロールはかなり古いです。C#やVB.Netも
例外とは言えませんが。
 
正攻法としては、WICでGIFの各Frameを分割したのを
Direct2DでUserForm上描画する方法だと思います。VBAでの実装はやや難しいですが、
その分面白ですね。
 
3)移動時には、既存のコントロールの後ろを通過してほしい。

WebBrowserコントロールはWindowハンドルを持っています。Windowハンドルを持っていない
Label、TextBoxとのZOrderの構成は成立しません。常にWebBrowserが手前です。
幸い、FrameコントロールはWindowハンドルを持っていますので、Label、TextBoxなどを
Frameで包むことでさむさむさんの狙い通りの動作になるでしょう。
WebBrowserのZOrderをmsoSendToBackにセットすることで後ろを通過します。
 
■背景色の件
WebBrowserのサイズをGIFのサイズに指定し、HTMLのimgのTop、Leftを「0」にセット
する事で背景色のケアは要らなくなるでしょう。

投稿日時: 18/01/29 06:44:03
投稿者: さむさむ

Abyss2さん ありがとうございます。
FrameだとZorderが使え、WebBowserを後方に置くことを確認しました。
いったん、この質問は解決にさせていただきます。
ありがとうございました。