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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1012
たぬきマウスカーソルを変更させるには?6解決


たぬき

リンク

2006/10/12(Thu) 02:10:59|NO.2947

画面上の指定した部分に、マウスカーソルを合わせると、カーソルの種類が変化するスプリクトを書きたいのですが…。
上手くいきません。
イメージとしては、IE上でのリンク部分にカーソルを合わせた時、ハンド型に変化するのと同じイメージです。

repeat
X=mousex
Y=mousey
repeat
if (X>50)&(X<640)&(Y>390)&(Y<405) { ;指定した部分
buffer 6
picload "hand.gif" ;用意したハンド画像
gsel 0
color 0,255,0
gmode 4,,,256
X=mousex
Y=mousey
pos X,Y
gcopy 6,0,0,20,24
               ・
               ・(中略)
               ・
await 1
loop

と、してみたのですが、
これでは指定した部分にカーソルがある間、その部分がハンド画像だらけに…!(当たり前ですね。凹)
特に自前の画像を使う事にはこだわってはいませんので、
何とかカーソルの種類を変えられたらと思います。
どなたか上手いやり方を、ご存知ないでしょうか?
宜しくお願いします。



この記事に返信する


Irisawa

リンク

2006/10/12(Thu) 08:08:37|NO.2948

今は時間がないので取り敢えず、ヒントだけ。

http://www.kumei.ne.jp/c_lang/sdk2/sdk_147.htm

あとは自分で調べてみてください。



Irisawa

リンク

2006/10/12(Thu) 16:20:21|NO.2951

http://yokohama.cool.ne.jp/chokuto/urawaza/changecursor2.html

の方がもっと分かりやすいかも。
実際にはいろいろまだまだ問題だらけですが参考にしてください。
(今回は簡単にボタンを使用しましたがメッセージフックで特定の範囲を判断したりとか
すればもう少しらしくなるかも)


#uselib "user32.dll" #cfunc LoadCursorFromFile "LoadCursorFromFileA" sptr #func SetClassLong "SetClassLongA" int, int, int #cfunc SetCursor "SetCursor" int objsize 150 button "http://www.onionsoft.net", *OnButton id = stat hCursor = LoadCursorFromFile("C:\\windows/Cursors/harrow.cur") SetClassLong objinfo(id, 2), -12, hCursor hbkCur = SetCursor(hCursor) stop *OnButton stop



naznyark

リンク

2006/10/14(Sat) 01:08:49|NO.2968

 自前でやるなら処理のポイントは以下のようなもの。

・カーソルの描画はマウスカーソルが動いたときのみ行う。
・カーソル描画前にカーソルによって上書きされる範囲の画像を別の場所に退避。
・カーソル描画前に退避させておいた画像を描き戻してカーソルを消去。
・実際の描画処理は 前の位置のカーソルを消去 → 新しい位置にカーソルを描画。


> buffer 6
> picload "hand.gif" ;用意したハンド画像

 必要も無いのにループの中で何度もファイルを読み込むのは良くありません。



くり

リンク

2006/10/29(Sun) 20:29:34|NO.3161

「mouse」の処理が結構重かったのでこのスクリプトは長いものには使えないかも…。


repeat redraw 2 color:boxf 100,100,300,200 mouse if mousex>100&mousex<300&mousey>100&mousey<200{ mouse -1 color 255,255,255:boxf mousex-5,mousey-5,mousex+5,mousey+5 } redraw 1 await 1 loop



Asbest

リンク

2006/11/4(Sat) 21:28:46|NO.3244

下記のモジュールを使ってがんばってみてください
範囲の指定ぐらいだけなら容易にできるとおもいます。

//マウスが指定した範囲内にある場合は1を返す
//mouserect ポジション取得モード(0=システム変数,1=LPARAM),左上X,左上Y,右下X,右下Y
#defcfunc mouserect int p1,int p2, int p3, int p4, int p5
if p1=0{if (p2<=mousex)&(p3<=mousey)&(p4>=mousex)&(p5>=mousey){return 1}}if p1=1{
if (p2<=LOWORD(lparam))&(p3<=HIWORD(lparam))&(p4>=LOWORD(lparam))&(p5>=HIWORD(lparam))



名無し

リンク

2006/11/5(Sun) 14:36:48|NO.3247

j



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