HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0525
ba-sannかっこいいツールを作る為・・・影をつけとうとしましたが;;6未解決


ba-sann

リンク

2013/5/25(Sat) 18:31:19|NO.54280

かっこいいツールを作る為・・・影をつけとうとしましたが
メイン本体と影はできたのですが
メイン本体をクリックすると動いてしまいます。。
メイン本体を動かすと影はついてくるようにしたいです。
ただ、ウィンドウをクリックすると動いてしまうのを改善したいのですが
以下ソースコード、何が悪いのでしょうか><


/////////////////窓に影を作成////////////////////
#include "user32.as"

w_width = 320
w_height = 240

bgscr 0,w_width,w_height,0
color 255,255,255 : boxf

bgscr 1,w_width,w_height,0
color 0,0,0 : boxf
GetWindowLong hwnd,-20
SetWindowLong hwnd,-20,stat|$80000
SetLayeredWindowAttributes hwnd,0xffffff,128,3

z=7
gsel 0
gosub *ON_WINDOW_MOVE

*MAIN_ROUTINE
ps=s
stick s,256 : ts=ps^s : rs=ts&ps : ts&=s
if(s&512):end

gsel 0
if(ts&256):mx=ginfo_mx:my=ginfo_my:wx=ginfo_wx1-8:wy=ginfo_wy1-8:z=24
if(s&256):width ,,wx-mx+ginfo_mx,wy-my+ginfo_my:gosub *ON_WINDOW_MOVE
if(rs&256):z=8:width ,,ginfo_wx1+8,ginfo_wy1+8 :gosub *ON_WINDOW_MOVE
await 1
goto *MAIN_ROUTINE

*ON_WINDOW_MOVE
w_x=ginfo_wx1:w_y=ginfo_wy1
gsel 1
width ,,w_x+z,w_y+z
gsel 0,1
return



その他、かっこいいツールってどんなものを作ったらおもしろいですか!?
みなさんの意見なども聞きたいです^^



この記事に返信する


ツノン

リンク

2013/5/25(Sat) 21:52:18|NO.54289

少しバグが有るかもですが、下のスクリプトで、ウィンドウズデフォルトの影をつけることが出来ます。
(hspの仕様上、自アプリケーションの全てのウィンドウに影がついてしまう)

#include "user32.as" #define GCL_STYLE $FFFFFFE6 #define CS_DROPSHADOW 0x00020000 #define SWP_NOSIZE $00000001 #define SWP_NOMOVE $00000002 #define SWP_FRAMECHANGED $00000020 bgscr 1,,,2 GetClassLong hwnd,GCL_STYLE SetClassLong hwnd,GCL_style,stat | CS_DROPSHADOW SetWindowPos hwnd,0,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_FRAMECHANGED gsel 1,1



ba-sann

リンク

2013/5/26(Sun) 00:47:53|NO.54294

ツノンさん

なるほど。確かにそれも影ですが
独自の方法でかっこいいツールを作りたいので自分で影を作ってみて
最小化ボタンもシステムを使わずに命令で行ってます。

そこでまた問題が二つ発生しました^^;

1つめ:
影はつけることできたんですが、最小化を押すと影が残ってしまいます。。
これはどう改善したらいいですかね。。

2つめ
これを起動して他のウィンドウを移動すると一緒に動いてしまいます・・・。
これも改善方法がわかりません。。

だれかご教授頂けたら嬉しいです!

ソース、めちゃくちゃ汚いですが・・・w
サンプルソース載せておきます^^


#uselib "kernel32.dll"
#include "hsp3util.as" ; テキスト表示
#include "kernel32.as"
#define ERROR_ALREADY_EXISTS $B7
#define PBS_MARQUEE 0x08
#define PBST_NORMAL 0x0001
#define PBST_ERROR 0x0002
#define PBST_PAUSED 0x0003
#define PBM_SETSTATE 0x0410
#define PBM_GETSTATE 0x0411
#define PBM_SETMARQUEE 0x040A
#uselib "user32.dll"
#func SetWindowLong "SetWindowLongA" int,int,int
#func SetLayeredWindowAttributes "SetLayeredWindowAttributes" int,int,int,int
#func GetWindowLongA "GetWindowLongA" int , int
#func SetWindowLongA "SetWindowLongA" int , int , int
#func SetLayered "SetLayeredWindowAttributes" int , int , int , int
#func keybd_event "keybd_event" int, nullptr, int
bgscr 0,683,379,0,x,y : cls 1 ;BGScreenの値を1にする



objsize 18,18
pos 665,0
button gosub "─" ,*mini

w_width = 683
w_height = 379

bgscr 1,w_width,w_height,0
color 0,0,0 : boxf
GetWindowLongA hwnd,-20
SetWindowLongA hwnd,-20,stat|$80000
SetLayeredWindowAttributes hwnd,0xffffff,218,3

z=4
gsel 0
gosub *ON_WINDOW_MOVE

*MAIN_ROUTINE
ps=s
stick s,256 : ts=ps^s : rs=ts&ps : ts&=s
if(s&512):end
gsel 0
if(ts&256):mx=ginfo_mx:my=ginfo_my:wx=ginfo_wx1-0:wy=ginfo_wy1-0:z=4
if(s&256):width ,,wx-mx+ginfo_mx,wy-my+ginfo_my:gosub *ON_WINDOW_MOVE
if(rs&256):z=4:width ,,ginfo_wx1+0,ginfo_wy1+0 :gosub *ON_WINDOW_MOVE
await

goto *MAIN_ROUTINE


*ON_WINDOW_MOVE
w_x=ginfo_wx1:w_y=ginfo_wy1
gsel 1
width ,,w_x+z,w_y+z
gsel 0,1
return



*mini

; SC_MINIMIZE 最小化
sendmsg hwnd, $112, $F020
wait 200
; ウィンドウを元の位置に戻す(SC_RESTORE)
sendmsg hwnd, $112, $F120
stop



fortunehill

リンク

2013/5/26(Sun) 01:55:11|NO.54296

/*ご参考(半透明の影で無くても良いのなら)*/

#include "gdi32.as" #include "user32.as" bgscr 0 _hwnd = hwnd pos 640-64-10-2,2 button "x",*label_2 boxf 10,470,640,480 boxf 630, 10,640,480 ;リージョンウインドウ #if 0 CreateRectRgn 0, 0,630,470 _hRgn = stat CreateRectRgn 10,10,640,480 _hRgn(1)= stat CombineRgn _hRgn(0),_hRgn(0),_hRgn(1),2 SetWindowRgn hwnd ,_hRgn(0),1 #endif ;レイヤードウインドウ #if 1 GetWindowLongA hwnd,-20 SetWindowLongA hwnd,-20,stat | $80000 SetLayeredWindowAttributes hwnd,$fe00fe,0,1 color $fe,$00,$fe boxf 630, 0,640, 10 boxf 0,470, 10,480 #endif onclick *label_1 stop *label_1 sendmsg _hwnd,$A1,2 stop *label_2 end



ぴょぴょ

リンク

2013/5/26(Sun) 02:09:33|NO.54297

> 1つめ:
> 影はつけることできたんですが、最小化を押すと影が残ってしまいます。。
> これはどう改善したらいいですかね。。
これは簡単でしょう。
2つのウインドウのうち1つしか最小化してません。
次のように2つに対して最小化すれば良いでしょう。
*mini
; SC_MINIMIZE 最小化 gsel 1:sendmsg hwnd, $112, $F020 gsel 0:sendmsg hwnd, $112, $F020 wait 200 ; ウィンドウを元の位置に戻す(SC_RESTORE) gsel 1:sendmsg hwnd, $112, $F120 gsel 0:sendmsg hwnd, $112, $F120 stop
あとHSPソースの先頭行に<pre>を挿入したり、
最終行に</pre>を付ければタブ文字が表示されます。
(全部小文字で入力すること)



ba-sann

リンク

2013/5/26(Sun) 02:23:49|NO.54298

>>fortunehillさん

なかなかいい影ですねw
その影も使ってみます^^

>>ぴょぴょ
うほw
そんな簡単な事だったのか。。。
初心者なのでやっと仕組みが理解できました^^ありがとうございます





2つめ
これを起動して他のウィンドウを移動すると一緒に動いてしまいます・・・。
これも改善方法がわかりません。。


あとはこれですね・・・難しいです・・・;;



暇人

リンク

2013/5/26(Sun) 15:28:50|NO.54314

>if(rs&256):z=4:width ,,ginfo_wx1+0,ginfo_wy1+0 :gosub *ON_WINDOW_MOVE
これは必要ないんじゃないの?



ONION software Copyright 1997-2023(c) All rights reserved.