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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0409
たこオーナードローについて5解決


たこ

リンク

2008/4/9(Wed) 22:29:29|NO.15030

オーナードローボタンを作成したいと思っているのですが
ボタンを押された時の処理となにもされてない時の処理はできました
そしてマウスがボタンの上にあるときの処理も作りたいのですが、
repeat 〜 loop 間の処理をすれば楽なんですが、
なるべくウィンドウメッセージから処理をしたいです
マウスがボタンの上にあるときにメッセージを送るようなウィンドウメッセージはありませんか?
知っている方教えてください

#include "user32.as" #include "gdi32.as" #module #define ctype COLORREF(%1,%2,%3) (%1)+((%2)<<8)+((%3)<<16) #deffunc DrawRect int h, int px, int py, int sx, int sy ;指定したデバイスコンテキストに四角形を描画 col = COLORREF(ginfo_r, ginfo_g, ginfo_b) CreatePen 0, 1, col hPen = stat : SelectObject h, hPen CreateSolidBrush col hBrush = stat : SelectObject h, hBrush Rectangle h, px,py , sx,sy DeleteObject hPen DeleteObject hBrush return #global winobj "BUTTON", "TEST", 0, 0x5000400B, 100, 30 oncmd gosub *DRAWITEM, $2B;WM_DRAWITEM mes stat stop *DRAWITEM dupptr DRAWITEMSTRUCT, lParam, 36 title ""+DRAWITEMSTRUCT.4 ownHDC = DRAWITEMSTRUCT.6 switch DRAWITEMSTRUCT.3 case 1;描画する必要あり switch DRAWITEMSTRUCT.4 case 17;押された color 0,0,255 swbreak default;その他 color 255,0,0 swbreak swend DrawRect ownHDC, 0,0 , 100,30 swbreak swend return



この記事に返信する


GENKI

リンク

2008/4/10(Thu) 00:36:56|NO.15042

これは参考になりませんか?
http://hspdev-wiki.net/?Module%2Fmod_customizebutton_v2



As

リンク

2008/4/10(Thu) 00:58:16|NO.15043

ホットトラックについていろいろと調べてみましたが、メニューにはODS_HOTLIGHTがItemStateに渡される
ようですが、ボタンには残念ながら渡されないようです。HSP以外にも様々な言語で渡されないような
記載がありました。

代用策として、サブクラス化したり
#define global WM_MOUSEHOVER 0x02A1 //マウスがアイテムの上にある
#define global WM_MOUSELEAVE 0x02A3 //マウスがウィンドウ外にでる
ウィンドウメッセージを処理したりすることで可能にしていましたが、HSPではこれらの方法は
不可能なようです。


もしかしたら正規の方法があるのかもしれませんが、今のところこの方法をお勧めします。
http://hspdev-wiki.net/?eseobj%2Fimgbtn
以前私が作ったモジュールです。モジュール変数がなかったころに作ったので複雑な処理も
含まれていますが、まずボタンとしては動くかと思います。



naznyark

リンク

2008/4/10(Thu) 03:08:00|NO.15044

このウィンドウメッセージの本来の用途ではないですが
WM_SETCURSOR を処理するという方法があります。
(本来の用途とは違うので意図した処理を
常に問題なく行なえるかどうかはわかりません。)

#include "user32.as" #define WM_SETCURSOR 0x20 sdim text, 64, 2, 2 text( 0, 0 ) = "c", "===c===" text( 0, 1 ) = "b", "BBB" dim hw, 2 dim f, 2, 2 chkbox text( 0, 0 ), c : hw( 0 ) = objinfo( stat, 2 ) button gosub text( 0, 1 ), *dummy : hw( 1 ) = objinfo( stat, 2 ) oncmd gosub *onsetcursor, WM_SETCURSOR stop *dummy return *onsetcursor c += 1 title "" + wparam + "(" + c + ")" // ウィンドウの上にカーソルがあるかを調べる。 repeat 2 if ( wparam == hw( cnt ) ) { f( 0, cnt ) = 1 } else { f( 0, cnt ) = 0 } loop // 状態(カーソルが上にあるかないか)の変化があればテキスト変更。 repeat 2 if ( f( 0, cnt ) != f( 1, cnt ) ) { // (objprm でテキストを変更しようとすると落ちる。) SetWindowText hw( cnt ), varptr( text( f( 0, cnt ), cnt ) ) f( 1, cnt ) = f( 0, cnt ) } loop return



raisen

リンク

2008/4/10(Thu) 14:39:07|NO.15047

参考になるか分かりませんが
http://www.winapi-database.com/Message/BM/index.html



たこ

リンク

2008/4/10(Thu) 17:38:42|NO.15050

いろいろな解答ありがとうございます
いろんなやり方があるんですね、とても参考になりました

naznyarkさんのやり方が、僕がやりたかった方法に一番当てはまったので、
WM_SETCURSORを使います。
ありがとうございました



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