むか~し むかし、あるところに「半透明ウィンドウ」がありました。

むか~し むかし、あるところに「半透明ウィンドウ」がありました。

このタイトルに深い意味はありません。

モジュール (「sem_win.as」という名前で保存)

#module
//user32.asから抜き出し
#ifdef __hsp30__
#ifndef __USER32__
#define global __USER32__
#uselib "USER32.DLL"
#func global SetLayeredWindowAttributes "SetLayeredWindowAttributes" sptr,sptr,sptr,sptr
#define global GetWindowLong GetWindowLongA
#func global GetWindowLongA "GetWindowLongA" sptr,sptr
#define global SetWindowLong SetWindowLongA
#func global SetWindowLongA "SetWindowLongA" sptr,sptr,sptr
#endif
#endif
//終
#deffunc sem int _p1
if varptr(SetLayeredWindowAttributes) = 0 : dialog "Windows 2000/XP/Vistaではありません。" : end
GetWindowLong hwnd, -20
SetWindowLong hwnd, -20, stat | $80000
SetLayeredWindowAttributes hwnd, 0, _p1, 2
return
#global

サンプル (自由な名前で保存)

//※Windows 2000以降で動作
#include "sem_win.as"
title "半透明ウィンドウ"
a=0
b=1
*main
if a<=0 : b=1
if a>=255 : b=-1
a+=b
sem a
await 10
goto *main


ず~とほったらかしになってたのを載せてみました。


「むか~し むかし、あるところに「半透明ウィンドウ」がありました。」への6件のフィードバック

  1. え!
    これもすごい……
    何に使おうか悩んでいますが、
    ああ、閉じるときとかにスッと消えるのに
    使ってみるのもいいかもしれませんね。

  2. onexit命令を使えばいけますね!
    指定したレベルに飛び、そこで透明度を0mで下げてからendにすればちょうどよくなりますね。
    -----------------------------------------------------------
    #include "sem_win.as"
    title "ゆっくり消えるウィンドウ"
    onexit *exit
    stop
    *exit
    a=255
    repeat 51
    sem a
    a-5
    await 5
    loop
    end

  3. おお、素晴らしい!
    ウィンドウがこのように消えるようなソフトは見たことないです。
    なるほどなあ……

  4. あ、あれ?!
    「そこで透明度を0mで下げてから」っておもいっきり入力ミスりました。確か「0に下げてから」と入力しようとした覚えがあります。すいません。

    でも、この消え方は使えそうですよね。

  5. ど、どういうことでしょうか?
    動作しないと言ってるのですか?
    このスクリプトはWindows 2000以降でないと動作しません。

コメントは受け付けていません。