[[20180117210141]] 『ユーザーフォームの背景だけを透明にしたい』(Chanki) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォームの背景だけを透明にしたい』(Chanki)

EXCEL VBAのユーザーフォームの背景のみを透明にすることはできるでしょうか?
ユーザーフォーム全体を透明にする方法は見つけたのですが、ユーザーフォームの中にあるラベルやボタンは透明にしたくありません。
目標はラベルやボタンだけが浮いている状態にすることです。
ご存知の方、よろしくお願いします。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


回答じゃなくて逆質問になっちゃいますけど、私はユーザーフォーム全体を透明にする方法を知りませんので、後学のために教えていただけませんか?
(もこな2) 2018/01/18(木) 00:26

 > ラベルやボタンだけが浮いている状態にすることです。

 Frameコントロールの中に上記ラベルやボタンを置く事です。
 つまり、別Window扱い
(Abyss2) 2018/01/18(木) 01:04

フォーム全体の透明化で良さそうに思うのですが、何故、外枠を残すのでしょうね? そして、フォームの透明化を知っているということは、APIのSetLayeredWindowAttributesを使っていそうですが、このAPIを調べていれば、アルファ値による対象ウィンドウの透明度の他に、特定色の透明化が可能だと気づきそうに思うのですが。 自力でAPIを調べられる人以外には、APIを使うのはお薦めしません。(使用した事による影響をいちいち聞かれても困るので)

予め、フォームの背景色を、システム色ではなく、パレット色から選択したものにしておいてください。

 Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 Private Declare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long) As Long
 Private Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
 Private Declare Function SetLayeredWindowAttributes Lib "USER32" _
    (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Long, ByVal dwFlags As Long) As Long
 Const GWL_EXSTYLE = (-20)
 Const WS_EX_LAYERED = &H80000
 Const LWA_COLORKEY = 1&

 Private Sub UserForm_Initialize()
    Dim hWnd As Long
    hWnd = FindWindow("ThunderDFrame", Me.Caption)
    Call SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED)
    Call SetLayeredWindowAttributes(hWnd, Me.BackColor, 0, LWA_COLORKEY)
 End Sub
(???) 2018/01/18(木) 09:40

回答ありがとうございます。
無事、目的のものが完成しました。
これを機にAPIは勉強してみようと思います。

ちなみに、「全体を透明」はこの辺のサイトを参考にしました。
https://www.excel-pitin.net/single-post/2017/08/06/邪魔なユーザーフォームを透明に%EF%BC%81%EF%BC%8812-準備編%EF%BC%89
(Chanki) 2018/01/22(月) 21:31


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.