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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0716
cmoritoshiオリジナル右クリックメニュー3解決


cmoritoshi

リンク

2014/7/16(Wed) 23:19:37|NO.62928

ちょっと思い付きで作りたくなったので作ってみました。
オリジナルの右クリックメニューができちゃいます。
しかし未完成なところが多々あると思いますので、
みなさんいろいろいじっちゃってください。
でもソースがとても汚いです。
とりあえず実行してみればわかると思います。


#module #uselib "user32" #cfunc GetWindowLong "GetWindowLongA" int, int #func SetWindowLong "SetWindowLongA" int, int, int #define GWL_EXSTYLE -20 #define WS_EX_TOOLWINDOW 0x0080 dim m_clr,10,10 : sdim m_disp,100,10,30 sdim m_font,15,10 : dim ln,10 : dim lnmax,10 : dim ftsz,10 : dim wid,10 : dim hgh,10 : dim m_wid,10 //setrmenu メニューID,"メニュー表示文字列",背景色(3),選択色(3),テキスト色(3) #deffunc setrmenu int m1, str m2,int clr1,int clr2,int clr3,int clr4,int clr5,int clr6,int clr7,int clr8,int clr9 m_clr(mid,1)=clr1: m_clr(mid,2)=clr2: m_clr(mid,3)=clr3 m_clr(mid,4)=clr4: m_clr(mid,5)=clr5: m_clr(mid,6)=clr6 m_clr(mid,7)=clr7: m_clr(mid,8)=clr8: m_clr(mid,9)=clr9 mid=m1 : m_disp(mid)=m2 split m_disp(mid),"\n",m_disp2 ln(mid)=stat lnmax(mid)=0 repeat ln(mid) m_disp(mid,cnt)=m_disp2(cnt) if lnmax(mid)<strlen(m_disp(mid,cnt)): lnmax(mid)=strlen(m_disp(mid,cnt)) loop return //rmenufont メニューID,"フォント名",サイズ,メニュー幅,項目の高さ #deffunc rmenufont int m1,str mfont,int sz,int w1,int h1 mid=m1 m_font(mid)=mfont : ftsz(mid)=sz : wid(mid)=w1 : hgh(mid)=h1 : m_wid(mid)=w2 return //rmenu メニューID,結果が代入される変数 #deffunc rmenu int m1,var rslt mid=m1 if iparam==3{ m_sw=1 if wid(mid)<=0 : wid(mid)=lnmax(mid)*8+20 if hgh(mid)<=0 : hgh(mid)=25 bgscr 2,wid,hgh*ln(mid),2,ginfo_mx,ginfo_my SetWindowLong hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_TOOLWINDOW gsel 2,2 if m_font(mid)!="" :font m_font(mid),ftsz :else:sysfont 0 bfmx=-1 : bfmy=-1 repeat if bfmx!=mousex | bfmy!=mousey { redraw 0 color m_clr(mid,1),m_clr(mid,2),m_clr(mid,3):boxf rslt=int(mousey/hgh(mid)) color m_clr(mid,4),m_clr(mid,5),m_clr(mid,6):boxf 2 , rslt*hgh(mid)+2 , wid(mid)-3 , (rslt+1)*hgh(mid)-3 repeat ln(mid) color m_clr(mid,7),m_clr(mid,8),m_clr(mid,9) pos 10,hgh(mid)*cnt+2 :mes m_disp2(cnt) loop redraw 1 } bfmx=mousex : bfmy=mousey wait 10 loop } else{ if m_sw=1 { if ginfo_act!=2 : rslt=-1 if ginfo_act==2 { m_sw=0 } m_sw=0 : gsel 2,-1 } } return #global //------右クリックメニューサンプル onclick gosub *hantei setrmenu 0,"menu1\nmenu2\nmenu3",0,128,0,0,255,0,255,255,255 rmenufont 0,msgothic,28,120,30 stop *hantei rmenu 0,kekka dialog kekka stop

これからは少しやり方を変えて作っていこうかなと思っています。



この記事に返信する


cmoritoshi

リンク

2014/7/16(Wed) 23:36:03|NO.62929

仕様について

fontの設定でフォント名を""としたときはHSPの標準フォントを使用し、
サイズ、幅、高さは無視されます。



KOMARI

リンク

2014/7/17(Thu) 00:05:36|NO.62930

なかなかすごいですね。
bgscrのいい使い道だと思います。
WS_EX_TOOLWINDOWはタスクバーに表示させないための配慮でしたか。

気になった点
・onclickでgosub指定しているのに*hanteiでstopしてる
・キャプションバーをクリックしたときにメニューが消滅しない(oncmd必須かな?)
・*hanteiのrmenuの次の行にgsel 0がないせい(?)かダイアログが大量にでる



cmoritoshi

リンク

2014/7/18(Fri) 08:28:48|NO.62937

KOMARIさん、返信ありがとうございます。

そうです、onclickは、gotoでした。gosubだと怪しい挙動になるかも…
ダイアログが出るのもこのせいだと思います。

画面上以外でメニューが消えないのはこのスクリプトの仕様ですね。ここは改良したいと思っています。



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