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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0315
かおruペイントソフト?5未解決


かおru

リンク

2008/3/15(Sat) 23:27:04|NO.14293

ペイントソフトもどきを作っているのですが、丸をクリックで書くところで挫折しています
中は空白で、丸の枠だけです

スクリプトを教えてください



この記事に返信する


a

リンク

2008/3/15(Sat) 23:40:40|NO.14294


color 0,255,0 circle 100, 100, 200, 200, 1



かおru

リンク

2008/3/15(Sat) 23:46:25|NO.14295

そうじゃなくて、丸の中は色がなくていいんです
んー丸というか円?



a

リンク

2008/3/15(Sat) 23:53:06|NO.14296


color 0,255,0 circle 100, 100, 200, 200, 0



いかろ

リンク

2008/3/16(Sun) 09:48:55|NO.14302

なんともセコイですが、こんな方法もあります。

font "MS 明朝",20 pos x,y mes "●" font "MS 明朝",19 pos x,y color 255,255,255 mes "●"




As

リンク

2008/3/16(Sun) 17:04:23|NO.14315

まずどう動作させたいのか考えてみましょう。
Windowsのペイントソフトで、円を描く場合最初に視点をクリックし、
そのままドラックしていってマウスを離した位置が終点です。
そのためにも、まずは始点と終点の位置を取得するためのスクリプトを考えます。

oncmd gosub *leftclick_down,$00000201 oncmd gosub *leftclick_up,$00000202 stop
oncmd命令によって、HSPウィンドウは左クリックを押した位置と、離した位置を取得するようになります。
マウスクリックが発生した場合、自働的に指定のラベルへ飛ぶのでそこで処理を書きます。

*leftclick_down mp_sx = lparam & 0xFFFF //始点X mp_sy = (lParam >> 16) & 0xFFFF //始点Y return *leftclick_up mp_ex = lparam & 0xFFFF //終点X mp_ey = (lParam >> 16) & 0xFFFF //終点Y mes "始点X:"+mp_sx+" 始点Y:"+mp_sy+" 終点X:"+mp_ex+" 終点Y:"+mp_ey return
これで始点と終点の位置が取得できました。あとは円を描画するだけですが、ひとつ問題が
あります。HSPの標準関数であるcircleを使って、Windowsのペイントのようなドラッグ時の
円の形を確認する仕組みを再現しようとすると、次々に円が描画されてしまい。丸だらけに
なってしまいます。なので、そこだけWin32APIを使うことになります。円を描画するには、

◇Ellipse  1 個の楕円を描画します。指定された外接長方形の中心が楕円の中心になります。  現在のペンを使って楕円を描画し、現在のブラシを使って塗りつぶします。
Ellipse関数を使用します。

#uselib "gdi32" #func Ellipse "Ellipse" int,int,int,int,int
更に、先頭の行にWin32APIを使用するためこれら命令を挿入します。
そして、いろいろがんばることによって実現できます。

#define mp_ex point.0 #define mp_ey point.1 #uselib "gdi32" #func Ellipse "Ellipse" int,int,int,int,int #func SelectObject "SelectObject" int, int #cfunc GetStockObject "GetStockObject" int #func SetROP2 "SetROP2" int,int #uselib "user32" #func InvalidateRect "InvalidateRect" int,sptr,int #func SetCapture "SetCapture" int #func ReleaseCapture "ReleaseCapture" #func ScreenToClient "ScreenToClient" int,sptr oncmd gosub *leftclick_down,$00000201 oncmd gosub *leftclick_up,$00000202 oncmd gosub *mousemove,$00000200 hBnull=GetStockObject($00000005) dim rp,4 stop *leftclick_down dim point,2 point.0=ginfo(0) point.1=ginfo(1) ScreenToClient hwnd,varptr(point) mp_sx = point.0 //始点X mp_sy = point.1 //始点Y flag_click=1 SetCapture hwnd return *leftclick_up mes "始点X:"+mp_sx+" 始点Y:"+mp_sy+" 終点X:"+mp_ex+" 終点Y:"+mp_ey SelectObject hdc, hBnull SetROP2 hdc, $0000000D Ellipse hdc, mp_sx, mp_sy, mp_ex, mp_ey flag_click=0 dim rect,4 rp.0=mp_sx rp.1=mp_sy rp.2=mp_ex rp.3=mp_ey InvalidateRect hwnd, varptr(rp), 0 ReleaseCapture return *mousemove if flag_click=1{ if rp.0+rp.1+rp.2+rp.3!0{ Ellipse hdc, rp.0, rp.1, rp.2, rp.3 InvalidateRect hwnd, varptr(rp), 0 } SetROP2 hdc, $00000006 dim point,2 point.0=ginfo(0) point.1=ginfo(1) ScreenToClient hwnd,varptr(point) rp.0=mp_sx rp.1=mp_sy rp.2=point.0 rp.3=point.1 SelectObject hdc, hBnull Ellipse hdc, rp.0, rp.1, rp.2, rp.3 InvalidateRect hwnd, varptr(rp), 0 } return



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