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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0124
ZEPHYROSもどきを作りたい!16解決


ZEPHYR

リンク

2011/1/24(Mon) 08:06:46|NO.36718

OSもどきを作りたいんですが、ロードっぽい画面(ゲージが徐々にたまっていくやつ)
ってどうすれば作れますか??

それと、デスクトップ画面で、例えば、「メモ」の画像をクリックしたら自作メモ起動としたいのですが、
デスクトップの画像の上にメモ帳のアイコンを読み込んだり、その画像をクリックする事でフラグに飛ばすっていうのをどうやって作
ればいいですか??

無知ですいません!
おねがいします!



この記事に返信する


ひらまる

リンク

2011/1/24(Mon) 10:40:01|NO.36719

1は、プログレスバーと言います。「HSP プログレスバー」で検索してください。
2は、「マウスがクリックされたか」と「マウスがアイコンに接触しているか」を判定するのが一番拡張性が高いのではないでしょうか。

プログレスバーも、アイコンのクリック判定も、
やり方はいくらでもあるので、それが自己解決できない内は擬似OSというのは少々ハードルが高いのではないでしょうか。
HSP標準命令では、フォルダの名前を変えたりフォルダごとコピー、移動、削除ができなかったり……
一気に作ろうとせず、完成度低くてもまずは完成させて、次はもっと完成度の高いものを作る。
ってやっていかないと、いつまでも完成しないジレンマに襲われますよ。
また守ることと戦うこと ジレンマは終わらない!!!



win5126

リンク

2011/1/25(Tue) 16:26:05|NO.36748

それなら、アイコンのx位置(左上と右下)とy位置(左上と右下)左上は
右下は変数で記憶させます
画像の表示している位置(画像を表示するときのPos)右下はxとyにアイコンの画像サイズ分、変数に足します。
onclickを使い、ラベルにジャンプして、マウスの位置がMouseXとMouseYと変数(xとy)を組み合わせて(if)
アイコンのある位置あったら、ラベルにジャンプ
でいいんじゃない?
僕も自作OS開発者なのでw
この方法はGUI(ウィンドウを操作して、動かす(例:Windows,Lihnux,MacOS))でも使えます。
ほかに聞きたいことがあれば、答えれる範囲で答えます(^o^)



win5126

リンク

2011/1/25(Tue) 16:30:21|NO.36749

ファイル(拡張子があるファイル)のコピーと移動と名前の変更ならあります。
コピーはコピーをする命令があったはず・・・(名前が思いつかない、削除も)
移動は、コピーしてから、元のファイルを削除
名前の変更はコピー先の名前を変更する名前にして、元のファイルを削除



Maesuke

リンク

2011/1/25(Tue) 19:51:52|NO.36753

疑似OSって流行ってるんでしょうか…最近作る人が増えてる気がします。
同志がいて嬉しいものです。



先輩

リンク

2011/1/26(Wed) 09:44:02|NO.36766

擬似OS、自作OSと呼ぶから嘲笑されるんだと思う。
Sub Operating Systemと叫べば援助の手が増えると思うよ。



NAGAKAZU

リンク

2011/2/3(Thu) 17:30:13|NO.36872

//マクロとAPI呼び出し
#uselib "user32.dll" #func SetWindowLong "SetWindowLongA" int,int,int #func GetWindowLong "GetWindowLongA" int,int #define PBS_MARQUEE 0x08 #define PBM_SETMARQUEE 0x040A #define GWL_STYLE (-16) #define WS_CHILD 0x40000000 #define WS_VISIBLE 0x10000000 #define PBM_SETRANGE 0x0401 #define PBM_SETPOS 0x0402 #define ctype MAKELPARAM(%1,%2) (%1 | %2<<16) //プログレスバー設置 pos 5,5 winobj "msctls_progress32","",0,WS_CHILD | WS_VISIBLE,620,12 //プログレスバーのハンドルを取得 hProgress = objinfo(stat,2) //プログレスバーの範囲を0〜100にする sendmsg hProgress ,PBM_SETRANGE,0,MAKELPARAM(0,100) //プログレスバーのスタイルにPBS_MARQUEE(0x040A)を追加 GetWindowLong hProgress , GWL_STYLE SetWindowLong hProgress , GWL_STYLE ,stat | PBS_MARQUEE //プログレスバーの状態を不確定型にする sendmsg hProgress ,PBM_SETMARQUEE,1,2 //5秒待つ await 5000 //プログレスバーの状態を確定型(通常の状態)にする sendmsg hProgress ,PBM_SETMARQUEE,0,0 //プログレスバーのスタイルからPBS_MARQUEE(0x040A)を除く GetWindowLong hProgress , GWL_STYLE SetWindowLong hProgress , GWL_STYLE,stat ^PBS_MARQUEE //プログレスバーの位置を100まで移動する repeat 100,1 sendmsg hProgress ,PBM_SETPOS,cnt,0 await 99 loop



win5126

リンク

2011/3/13(Sun) 20:18:36|NO.37574

あれ、質問者は?



yout

リンク

2011/3/14(Mon) 03:35:43|NO.37583

……俺も自作cmd作成者だから言うことだが……

描画から全部自前でやれよ。
で、アプリケーションの仕組みも作って。
というよりCPUのエミュレータを作って、HSPでプログラムを記述できるようにして。

OSって、そうやって作るんだよ。



yout

リンク

2011/3/14(Mon) 04:26:07|NO.37584

1.デバイスの作成
とりあえず、各機能をデバイスごとに割り振る。
ディスプレイ(描画)
割り込み感受(キーボード、マウス受け取り)
タイマ(マルチタスク化に必要。でもd3timerで事足りるかも)

2.IPL/OSの作成
別にブートセクタとかを頑張る必要はない。
だってそんなの決めているのは向こうの仕様だから。
大きいのを作ってもかまわない。
でも、全部作ると大きくなるから#includeとかを使うことを念頭において
ばらばらにして、APIで読み込むといい。

まず最初に行うのは、デバイスとの関係性の作成。
仕様にもよるけど、#moduleと*label@moduleで頑張るならそれでおkだけど、
共有メモリとマルチプロセスならちゃんとオブジェクトを作らなければならない。
……自作にこだわるといっても、配線とか思えばそれでおkだし。

それから、描画。
posとかlineで「直接」やってもいいけど、やるならとことんそれっぽく。
ディスプレイデバイスの描画メモリを作成して、そこにOSが書き込んでから、
ディスプレイデバイスが描画する。この場合は別に常時書き換えは要らないから、
通知を行って、それをもって再描画という形でもいいと思う。
もちろんこうなるから、文字描画も自前で。

で、割り込み機能を実装して、マウスとキーボードを感受できるようにして、
マウスカーソルの描画をする。PICの初期化とかはやりたければご自由に。
この際に必要なバッファとかは自分で考えろ。

こうなってくるとウィンドウがほしくなってくる。
その前にメモリ管理。でもこの場合はsdimとpeekをもってメモリを使って、
使い終わったらsdim var,1でいいと思う。

それで、ウィンドウの作成。
まず、重ねあわせ処理。
レイヤの概念が必要。1枚1枚のレイヤを大きさの情報を集約させて、
重ねあわせ処理を行う。
シート自体に描画されるものは別にメモリを確保してそこにためる。
ウィンドウの描画に成功したら、ボタンとかも作れるはず。

キー入力は本来バイナリで来るけど、デバイスのほうで調整しておkだと思う。

で、マルチタスク。
アプリケーションの概念を作って、OSの変数への代入を禁止して、
別途に動かす。
そこにタスクスイッチを持ってきて、複数アプリを動かせるようにする。

ここからは(というより、ここまで作れるなら)後は説明が要らないはず。

……悪ノリ&長文失礼。



najac

リンク

2011/3/14(Mon) 13:00:14|NO.37590

もっともらしい単語をつなげただけの支離滅裂な妄想。



win5126

リンク

2011/3/14(Mon) 17:49:07|NO.37595

せっかくOSもどきをつくるならフルスクリーンにしてみては

#Include "HSPDef.As" DispY = Ginfo_DispY DispX = Ginfo_DispX ChgDisp 1,800,600 If Stat = 1 Or Stat = 2 { Bgscr 0,DispX,DispY,1,0,0 Color 0,0,0 : Boxf Color 255,255,255 Mouse -1 Mes "エラー" Await 3000 End } Else { If Stat ! 0 { Chgdisp 1,DispX,Dispy Bgscr 0,DispX,DispY,1,0,0 Color 0,0,0 : Boxf Color 255,255,255 Mouse -1 Mes "エラー" Await 3000 End } } Bgscr 0,800,600,1,0,0 Color 0,0,0 : Boxf Color 255,255,255 Mouse -1 Mes "成功"
こんなもんかな
これ僕が書いたんじゃないけど(-_-;)
http://game948.blog67.fc2.com/blog-entry-75.html
ここを参考にしました



win5126

リンク

2011/3/23(Wed) 11:33:55|NO.37829

主こない・・・



win5126

リンク

2011/4/28(Thu) 07:30:53|NO.38754

主はなんで来ないんだよ・・・



f(給与泥棒中)

リンク

2011/4/28(Thu) 09:26:16|NO.38759

もうこれで良いんじゃね?

http://www.youtube.com/watch?v=ma8LFG73S-c



win5126

リンク

2011/4/28(Thu) 16:12:07|NO.38763

Windows777などネ申すぎるわ
作れないな・・・



if maler

リンク

2011/4/28(Thu) 16:21:42|NO.38764

そうでもなくね?
『じゃあ作ってミロや』思われるのが落ちだと思うけど



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