|
|
2010/6/16(Wed) 19:25:13|NO.33287
ボタンについて教えて下さい
ウィンドウに2つのバッファーがあり
バッファーにはそれぞれボタンを埋め込みます
それらを並べて表示したいのです
図解(やりたいこと) 図解(現状・ボタン無し)
ーーーーーーーーーーー ーーーーーーーーーーー
|バッファ|バッファ| |バッファ|バッファ|
|+button |+button | | | |
ーーーーーーーーーーー ーーーーーーーーーーー
|ウィンドウ | |ウィンドウ |
ーーーーーーーーーーー ーーーーーーーーーーー
ボタンはバッファーに書き込めないのでしょうか?
もし書けないのなら、こうすれば似たようなコトできるよ!があれば教えて下さいお願いします
以下ソース
screen 0,400,400//下余白
buffer 1,200,200
buffer 2,200,200
gsel 0
gosub *createBt1
gosub *createBt2
gsel 0
*main
wait 1
gosub *draw
goto *main
*draw
redraw 2
pos 0,0
color 0,0,255
boxf 0,0,400,400
pos 0,0
gcopy 1, 0,0,200,200
pos 200,0
gcopy 2, 0,0,200,200
redraw 1
return
*createBt1
gsel 1
pos 0,0
color 0,255,0
boxf 0,0,200,200
button gosub "1番",*bt
return
*createBt2
gsel 2
pos 0,0
color 255,0,0
boxf 0,0,200,200
button gosub "2番",*bt
return
*bt
end
|
|
2010/6/16(Wed) 19:42:02|NO.33289
スクリプトは見てないんで回答として適切だかわかりませんが、
buffer でダメなら screen の「初期化する画面モード」に 2 を指定して、非表示のウインドウを作っちゃったらどうでしょう?
|
|
2010/6/16(Wed) 19:45:20|NO.33290
バッファというのは、画面上の画像(画面に描かれたもの)のデータをとっておくものなのですが、
実はボタンなどはこの「画像」のデータには含まれず、ウィンドウの上に乗っているようなものです。
だから、 pos 10,20
button "ボタン",*bt
color 255,255,0
boxf 0,0,100,100 //boxfで塗りつぶそうとする
pos 200,200
gcopy 0,0,0,100,100 //gcopyでコピーしようとする
*bt のようにboxfやgcopyの影響を受けません。これは、boxfやgcopyが「画像」を相手に処理するものだからです。
clsを使えばボタンなども一緒に消えますが、これは「画面を白くする」という処理と「ボタンなどを消す」という処理を別に行っているからです。
つまり、「バッファにボタンを埋め込む」ということはできないということです。
では、Limoneさんのやりたいようなことをするには、バッファを使わずに直接ID0のスクリーンにボタンを置くしかないです。背景に色や模様をつけたければ、ボタンとは別にその部分だけバッファに描いておくことになります。
screen 0,400,400//下余白
buffer 1,200,200
buffer 2,200,200
gsel 0
gosub *createBt1
gosub *createBt2
gsel 0
*main
wait 1
gosub *draw
goto *main
*draw
redraw 2
pos 0,0
color 0,0,255
boxf 0,0,400,400
pos 0,0
gcopy 1, 0,0,200,200
pos 200,0
gcopy 2, 0,0,200,200
redraw 1
return
*createBt1
gsel 1
pos 0,0
color 0,255,0
boxf 0,0,200,200
gsel 0 ;;追加
button gosub "1番",*bt
return
*createBt2
gsel 2
pos 0,0
color 255,0,0
boxf 0,0,200,200
gsel 0 ;;追加
pos 200,0 ;;追加
button gosub "2番",*bt
return
*bt
end
|
|
2010/6/16(Wed) 19:53:19|NO.33291
バッファ画面は描画処理命令用です。
(mes、boxf、line、picloadなどなど)
button命令はオブジェクトの配置です。
描画してるわけではないです。
|
|
2010/6/16(Wed) 20:24:52|NO.33294
ああああ。 なるほど。図の意味がわかった。
先の私の回答、参考になりませんね。
bgscr命令とwidth命令で強引になんとかできないかな……と思ってやってみたら全部タスクバーに出てきた。却下。
ボタンなどの位置を全部自分で管理するしかなさそうですねー。
|
|
2010/6/16(Wed) 20:28:57|NO.33295
なんとなく分かりました
どうもありがとうございます
自分のやりたいことをどうにかボタン以外で考えてみます
|
|
2010/6/17(Thu) 00:57:47|NO.33296
SYAMさんの方法を使ってみました。
SetParent 関数を使用して、bgscr で作られたウインドウを screen の子 にしています。
#include "user32.as"
#module
#define GWL_STYLE $FFFFFFF0
#define WS_CHILD $40000000
#define WS_POPUP $80000000
#deffunc SetParentFx int spf_hwnd_ , int spf_per_
GetWindowLong spf_hwnd_ , GWL_STYLE
style = stat
if style & WS_POPUP : style ^= WS_POPUP
SetWindowLong spf_hwnd_ , GWL_STYLE , style | WS_CHILD
SetParent spf_hwnd_ , spf_per_
return
#global
screen 0
color 0,255 : boxf
bgsizex = ginfo_winx/2
bgsizey = ginfo_winy/2
hMain = hwnd
bgscr 1 , bgsizex , bgsizey
button gosub "ボタン1" , *label1
color 255 : boxf
SetParentFx hwnd , hMain
bgscr 2 , bgsizex , bgsizey
button gosub "ボタン2" , *label2
color 0,0,255 : boxf
SetParentFx hwnd , hMain
width ,,bgsizex,0
stop
*label1
gsel 1
color rnd(255) , rnd(255) , rnd(255)
boxf
return
*label2
gsel 2
color rnd(255) , rnd(255) , rnd(255)
boxf
return
|
|