PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
22633 | 06/05/19 19:16:05 | RE(2):PB9.0: オブジェクトを半透明にする By Valkyrie |
22632 | 06/05/19 19:03:29 | RE(1):PB9.0: オブジェクトを半透明にする By Valkyrie |
22624 | 06/05/17 12:01:00 | PB9.0: オブジェクトを半透明にする By nariseki5 |
カテゴリ:スクリプトの記述
日付:2006年05月19日 19:03 発信者:Valkyrie
題名:RE(1):PB9.0: オブジェクトを半透明にする
nariseki5さん、こんばんは。
面白そうだったので、少し調べてみました。
Win32 API SetLayeredWindowAttributes を使用すれば可能です。
参考にしたWebページ
https://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp
---------- スクリプト ----------
// Window field offsets for GetWindowLong()
integer GWL_EXSTYLE = -20
// RedrawWindow() flags
integer RDW_INVALIDATE = 1 // 0x0001
integer RDW_ERASE = 4 // 0x0004
integer RDW_ALLCHILDREN = 128 // 0x0080
integer RDW_FRAME = 1024 // 0x0400
long LWA_ALPHA = 2 // 0x00000002
long WS_EX_LAYERED = 524288 // 0x00080000
---------- 半透明にするときのスクリプト ----------
long ll_winhwnd
ll_winhwnd = Handle(parent)
// このウィンドウに WS_EX_LAYERED を設定する
SetWindowLong(ll_winhwnd, GWL_EXSTYLE, &
GetWindowLong(ll_winhwnd, GWL_EXSTYLE) + WS_EX_LAYERED)
// このウィンドウを 70% のアルファにする
SetLayeredWindowAttributes(ll_winhwnd, 0, (255 * 70) / 100, LWA_ALPHA)
---------- 不透明にするときのスクリプト ----------
long ll_winhwnd, ll_null
setnull(ll_null)
ll_winhwnd = Handle(parent)
// このウィンドウ スタイルから WS_EX_LAYERED を削除する
SetWindowLong(ll_winhwnd, GWL_EXSTYLE, &
GetWindowLong(ll_winhwnd, GWL_EXSTYLE) - WS_EX_LAYERED)
// ウィンドウとその子に再描画を要求する
RedrawWindow(ll_winhwnd, ll_null, ll_null, &
RDW_ERASE + RDW_INVALIDATE + RDW_FRAME + RDW_ALLCHILDREN)
注意:
PowerBuilderではビット演算の論理和や論理積を計算できないので、単純に足し算引き算しています。
そのため、ひとつのスクリプトを連続で実行しないでください。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows XP
DBMS Oracle Net 9
Browser InternetExplorer
Server SoftWare
OS Windows Server 2003
DBMS Oracle9i
WebServer IIS
Copyright © 2013 Power Future Co., Ltd.