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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0925
初心者Windows のスタートメニューのようなもの4解決


初心者

リンク

2018/9/25(Tue) 16:02:40|NO.85441

Windows のスタートボタンのようなものが作りたいです。
一回ボタンを押すと、boxf命令で四角形を描画。
もう一度ボタンを押すと、描画した四角形を消す、といったものです。
分かりにくいかもしれませんが、回答よろしくお願いします。



この記事に返信する


沢渡

リンク

2018/9/25(Tue) 18:34:20|NO.85442

こんな感じでしょうか?
メイン画面の内容をあらかじめ裏画面にコピーしておき、四角形を消すときは裏画面からコピーするようにしています。

#define global boxf2(%1,%2,%3,%4) boxf %1,%2,(%1)+(%3)-1,(%2)+(%4)-1 //座標(%1,%2)に、幅%3、高さ%4の四角形を描く //裏画面バッファを作成 buffer 1,640,480,0 : gsel 0 #define mirror gsel 1 : pos 0,0 : gcopy 0,0,0,640,480 : gsel 0 //メイン画面の内容を裏画面にコピー #define back(%1,%2,%3,%4) pos %1,%2 : gcopy 1,%1,%2,%3,%4 //背景を描画 repeat 15 if cnt\2 : color 128,128,0 : else : color 0,0,128 boxf2 0,32*cnt,640,32 loop mirror flag=0 //ボックスを表示しているフラグ objsize 100,30 pos 0,450 : button gosub "スタート",*toggle stop *toggle if flag { flag=0 back 10,200,150,230 } else { flag=1 color 0,240,240 boxf2 10,200,150,230 } return



たかし

リンク

2018/9/25(Tue) 19:54:22|NO.85443

私が途中まで作ったOSもどきです。参考にしてみてください。
※これを改造する行為はおやめください

http://fast-uploader.com/file/7093428369726/



名無し

リンク

2018/9/29(Sat) 17:33:28|NO.85472

.瓮縫紂爾髻嵒漸茲するかしないか」の変数を用意する

▲ーソル座標がある範囲内に存在するかを取得する

以下は取得するモジュール。


#module __HSP3MEX__ #deffunc minit W = (ginfo(10) - ginfo(12)) / 2 T = ginfo(11) - ginfo(13) - W return 0 #undef mousex #defcfunc mousex return ginfo(0) - ginfo(4) - W #undef mousey #defcfunc mousey return ginfo(1) - ginfo(5) - T #defcfunc GetMouseRectPointer int prm1, int prm2, int prm3, int prm4 minit x1 = prm1 y1 = prm2 x2 = prm3 y2 = prm4 if mousex() >= x1 & mousey() >= y1 & mousex() <= x2 & mousey() <= y2 { return 1 } return 0 #global // 変数宣言 MenuButtonSize = 32 ; メニューボタンのサイズ(正方形とする) // メイン処理 repeat redraw 0 color 255, 255, 255 boxf color 40, 40, 40 boxf 0, ( 480 - MenuButtonSize ), MenuButtonSize, 480 if GetMouseRectPointer( 0, ( 480 - MenuButtonSize ), MenuButtonSize, 480 ) { title "メニューボタンの所にカーソルを発見!" } else { title "座標XY " + mousex() + " , " + mousey() } redraw 1 await 16 loop

※通常のHSP関数 mousex mousey が mousex() mousey() になっているのは、
 オブジェクト上にマウスが合っても取得するためです。
 元関数が存在した場合は置換か何かで修正してください。

△離皀献紂璽襪 GetMouseRectPointer関数 が範囲内になるとTRUE(1)になり、
 それ以外だとFALSE(0)になることを抑える。

ぞ綉の新関数で戻り値が TRUE の時に stick 命令で 左クリック をした時に
 ,諒竸瑤 変数 = 変数 ^ 1 にする。
 ↑にすることで 変数がFALSEの時にTRUEになり、TRUEの時にFALSEになる。

キ,諒竸瑤TRUEの時にメニューとなる描画命令を記入すれば完成となる。

結局は以下のスクリプトになる。


#module __HSP3MEX__ #deffunc minit W = (ginfo(10) - ginfo(12)) / 2 T = ginfo(11) - ginfo(13) - W return 0 #undef mousex #defcfunc mousex return ginfo(0) - ginfo(4) - W #undef mousey #defcfunc mousey return ginfo(1) - ginfo(5) - T #defcfunc GetMouseRectPointer int prm1, int prm2, int prm3, int prm4 minit x1 = prm1 y1 = prm2 x2 = prm3 y2 = prm4 if mousex() >= x1 & mousey() >= y1 & mousex() <= x2 & mousey() <= y2 { return 1 } return 0 #global // 変数宣言 MenuFlag = 0 ; メニューを「描画がするかしないか」 MenuButtonSize = 32 ; メニューボタンのサイズ(正方形とする) // メイン処理 repeat stick key ; キー管理 redraw 0 color 255, 255, 255 boxf color 40, 40, 40 boxf 0, ( 480 - MenuButtonSize ), MenuButtonSize, 480 if GetMouseRectPointer( 0, ( 480 - MenuButtonSize ), MenuButtonSize, 480 ) { title "メニューの所にカーソルを発見!" if key = 256 { dialog "クリック!!" MenuFlag ^= 1 } } else { title "座標XY " + mousex() + " , " + mousey() } if MenuFlag = 1 { color 0, 128, 255 boxf 0, 0, 160, ( 480 - MenuButtonSize ) } redraw 1 await 16 loop

これは自己中心的に作った手抜きスクリプトのオブジェクトを使わない派のやり方なので、
オブジェクトを使う派なら...頑張ってくれ。



初心者

リンク

2018/10/20(Sat) 21:11:36|NO.85625

皆様ありがとうございました。
OSもどきで使おうと思います。
ご覧になりたい方はマスコットの下のHPで飛べるはずです。
(まあ誰も使わんだろうね)



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.85441への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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