ペイントツールお約束の機能も、APIを使えば簡単に実装できます。
昔はSRPGの経路探索を応用したりしてモジュールを組んでたのですが……今思えば結構無茶してますね。
なおHSP2.61用のスクリプトはCrimson Forestさんにあるようです。// 参考
// http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpgdi/html/_win32_extfloodfill.asp
#include "gdi32.as"
#module
#const FLOODFILLSURFACE 1
// カレントカラーで(x, y)を含む同色領域を塗りつぶす
// 実際の画面に反映させるには redraw 1 を実行すること
#deffunc fill int x, int y
// カレントカラーを記憶
current_color = ginfo_r, ginfo_g, ginfo_b
// カレントカラーからブラシを生成
CreateSolidBrush (ginfo_b << 16) | (ginfo_g << 8) | ginfo_r
if stat {
hBrush = stat
} else {
dialog "ブラシの生成に失敗しました。プログラムを終了します。", 1
end
}
SelectObject hDC, hBrush
// 塗りつぶす色を取得
pget x, y
// 塗りつぶし実行
ExtFloodFill hdc, x, y, (ginfo_b << 16) | (ginfo_g << 8) | ginfo_r, FLOODFILLSURFACE
// 後始末
DeleteObject hBrush
color current_color(0), current_color(1), current_color(2)
return
#global
repeat 5
hsvcolor 191 * cnt / 5, 255, 255
boxf rnd(640), rnd(480), rnd(640), rnd(480)
loop
onclick gosub *do_fill
stop
*do_fill
hsvcolor rnd(192), 255, 255
fill mousex, mousey
redraw 1
return
2007年11月11日日曜日
閉塞領域の塗りつぶし
登録:
コメントの投稿 (Atom)
2 件のコメント:
いつも拝見しております。
どうしても一つお聞きしたいことがありますので、
失礼ながらも書かせて下さい。
もしよろしければヒントかサンプルスクリプトを
お教えて願います。
もしよろしければ1つ教えて頂きたいことがあります。
HSPの場合、exec "C:\\Program Files\\Ma…
といった感じで\\を二ついれる必要がありますが、
iniファイル等で
[Path]
dir=C:\Program Files\Ma\mp3
といった感じで\一つでセーブされているとします。
HSPのスクリプト上でどうやって\\とするものか悩んでおります。
フリーソフトウェアで
ファイルパスなど保存される時必ず\は1つ
になっているのでexec実行する際どうしているのかなと
はじめまして。HSPTV!の掲示板で質問されている方でしょうか?
HSPTV!の該当スレッドで既に優れた回答がいくつも出ているので、私がこれ以上説明できることはないと思います。
以下他の方と同じようなことを書きますが、最後まで読んでください。
検証用の短いプログラムをたくさん作って、色々と試してみることをお勧めします。ここでキーになるのは、Meganeさんらが仰っている「円記号を表現するために\\と書かなければならないのは、スクリプトの中だけ」ということです。
例えば下記スクリプトを実行して、デバッグウィンドウで変数sの中身を確認してください。
s = "\\"
assert
次に、「\」ひとつだけを書いたテキストファイルを「test.txt」という名前でHSP3本体があるフォルダに保存し、前回と同じように次のスクリプトを実行してください。
notesel s
chdir dir_exe
noteload "test.txt"
assert
両方同じ結果が得られているはずです。
私の勝手な推測ですが「スクリプトの中だけ」という言葉を難しくとらえ過ぎているのでしょう。ここで言うスクリプトの中だけとは、「スクリプトエディタで文字列として記述する時だけ」ということです。
以上を踏まえて、もういちど掲示板のスレッドをはじめから読み直してみてください。健闘を祈ります。
コメントを投稿