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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0616
Limonebuttonについて6解決


Limone

リンク

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



この記事に返信する


SYAM

リンク

2010/6/16(Wed) 19:42:02|NO.33289

スクリプトは見てないんで回答として適切だかわかりませんが、
buffer でダメなら screen の「初期化する画面モード」に 2 を指定して、非表示のウインドウを作っちゃったらどうでしょう?



test

リンク

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



Kpan

リンク

2010/6/16(Wed) 19:53:19|NO.33291

バッファ画面は描画処理命令用です。
(mes、boxf、line、picloadなどなど)

button命令はオブジェクトの配置です。
描画してるわけではないです。



SYAM

リンク

2010/6/16(Wed) 20:24:52|NO.33294

ああああ。 なるほど。図の意味がわかった。
先の私の回答、参考になりませんね。

bgscr命令とwidth命令で強引になんとかできないかな……と思ってやってみたら全部タスクバーに出てきた。却下。

ボタンなどの位置を全部自分で管理するしかなさそうですねー。



Limone

リンク

2010/6/16(Wed) 20:28:57|NO.33295

なんとなく分かりました
どうもありがとうございます
自分のやりたいことをどうにかボタン以外で考えてみます



info

リンク

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



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