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

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.