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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0404
大富豪AFooty2の右クリックメニュー8解決


大富豪A

リンク

2012/4/4(Wed) 15:16:30|NO.45791

Footy2で右クリックメニューを出したいんですが、Footy2エディタコントロールの上に
出そうとしても失敗しました。失敗したスクリプトを置いておくのでもしよかったら
アドバイスください。

#include "Footy2.as" #include "hscallbk.as" #include "user32.as" #func Focus "" int, int, int, int #func MoveCaret "" int, int, int, int #func TextModified "" int, int, int #func InsertModeChanged "" int, int, int #const FVIRTKEY 0x0001 #const FNOINVERT 0x0002 #const FSHIFT 0x0004 #const FCONTROL 0x0008 #const FALT 0x0010 #const WM_SIZE 0x0005 #const WM_COMMAND 0x0111 #enum IDM_UNDO = 1 #enum IDM_REDO #enum IDM_CUT #enum IDM_COPY #enum IDM_PASTE #enum IDM_SELECTALL #enum IDM_ITEM1 = 1 #enum IDM_ITEM2 #enum IDM_ITEM3 #enum IDM_ITEM4 *init gosub *createGUIObjects gosub *createAccelTable gosub *setCallBackFunctions onclick gosub *onjump oncmd gosub *on_resize, WM_SIZE oncmd gosub *on_command, WM_COMMAND onexit goto *on_exit dim msg, 7 Footy2SetFocus footy_id *msg_loop GetMessage varptr(msg), 0, 0, 0 ret = stat if (ret == 0)|(ret == -1) { goto *on_exit } TranslateAccelerator hwnd, haccel, varptr(msg) if stat == 0 { TranslateMessage varptr(msg) DispatchMessage varptr(msg) } goto *msg_loop #define WS_MAXIMIZEBOX 0x00010000 #define WS_SIZEBOX 0x00040000 *createGUIObjects screen 0, ginfo_dispx, ginfo_dispy GetWindowLong hwnd, -16 SetWindowLong hwnd, -16, stat | WS_MAXIMIZEBOX | WS_SIZEBOX width 640, 480 winobj "msctls_statusbar32", "ready", , $50000000 statusbar_id = stat if statusbar_id == -1 { dialog "ウィンドウオブジェクトが正常に生成されませんでした", 1 end } dim rect, 4 GetWindowRect objinfo_hwnd(statusbar_id), varptr(rect) if stat == 0 { dialog "ステータスバーの座標取得に失敗しました", 1 end } statusbar_height = rect(3) - rect(1) Footy2Create hwnd, 0, 0, ginfo_winx, ginfo_winy - statusbar_height, 0 footy_id = stat if footy_id < 0 { dialog "Error : type " + stat, 1 end } CreatePopupMenu hMenu.0 = stat AppendMenu hMenu.0, 0, IDM_ITEM3, "サブメニュー項目 3" AppendMenu hMenu.0, 0, IDM_ITEM4, "サブメニュー項目 4" CreatePopupMenu hMenu.1 = stat AppendMenu hMenu.1, 0, IDM_ITEM1, "メニュー項目 1" AppendMenu hMenu.1, $800, 0, "" AppendMenu hMenu.1, 0, IDM_ITEM2, "メニュー項目 2" AppendMenu hMenu.1, $10, hMenu.0, "サブメニュー" return *createAccelTable sdim accel, 6*6 key = 'Z', 'Y', 'X', 'C', 'V', 'A' repeat 6 poke accel, cnt*6+0, FCONTROL | FVIRTKEY wpoke accel, cnt*6+2, key(cnt) wpoke accel, cnt*6+4, cnt+1 loop CreateAcceleratorTable varptr(accel), 6 haccel = stat if haccel == 0 { dialog "アクセラレータテーブル作成に失敗しました", 1 } return *setCallBackFunctions setcallbk proc_Focus, Focus, *onFocus setcallbk proc_MoveCaret, MoveCaret, *onMoveCaret setcallbk proc_TextModified, TextModified, *onTextModified setcallbk proc_InsertModeChanged, InsertModeChanged, *onInsertModeChanged Footy2SetFuncFocus footy_id, varptr(proc_Focus), 0 Footy2SetFuncMoveCaret footy_id, varptr(proc_MoveCaret), 0 Footy2SetFuncTextModified footy_id, varptr(proc_TextModified), 0 Footy2SetFuncInsertModeChanged footy_id, varptr(proc_InsertModeChanged), 0 return *onFocus if callbkarg(3) & $FF { message = "Footyコントロールがフォーカスを得ました" } else { message = "Footyコントロールがフォーカスを失いました" } sendmsg objinfo_hwnd(statusbar_id), $401, 0, message return *onMoveCaret sendmsg objinfo_hwnd(statusbar_id), $401, 0, "line : " + callbkarg(2) + "" return *onTextModified switch callbkarg(2) case MODIFIED_CAUSE_CHAR message = "文字が入力されました(IMEオフ)" swbreak case MODIFIED_CAUSE_IME message = "文字が入力されました(IMEオン)" swbreak case MODIFIED_CAUSE_DELETE message = "Deleteキーが押されました" swbreak case MODIFIED_CAUSE_BACKSPACE message = "BackSpaceキーが押されました" swbreak case MODIFIED_CAUSE_ENTER message = "Enterキーが押されました" swbreak case MODIFIED_CAUSE_UNDO message = "元に戻す処理が実行されました" swbreak case MODIFIED_CAUSE_REDO message = "やり直し処理が実行されました" swbreak case MODIFIED_CAUSE_CUT message = "切り取り処理が行われました" swbreak case MODIFIED_CAUSE_PASTE message = "貼り付け処理が行われました" swbreak case MODIFIED_CAUSE_INDENT message = "インデント処理が行われました" swbreak case MODIFIED_CAUSE_UNINDENT message = "逆インデント処理が行われました" swbreak case MODIFIED_CAUSE_TAB message = "タブキーが押されました" swbreak default message = "テキストが編集されました(UNKNOWN)" swbreak swend sendmsg objinfo_hwnd(statusbar_id), $401, 0, message return *onInsertModeChanged if callbkarg(2) & $FF { message = "挿入モードに変更されました" } else { message = "上書モードに変更されました" } sendmsg objinfo_hwnd(statusbar_id), $401, 0, message return *on_command switch wparam & $FFFF case IDM_UNDO Footy2Undo footy_id swbreak case IDM_REDO Footy2Redo footy_id swbreak case IDM_CUT Footy2Cut footy_id swbreak case IDM_COPY Footy2Copy footy_id swbreak case IDM_PASTE Footy2Paste footy_id swbreak case IDM_SELECTALL Footy2SelectAll footy_id swbreak swend return #const SIZE_RESTORED 0 #const SIZE_MAXIMIZED 2 *on_resize if (wparam == SIZE_RESTORED) | (wparam == SIZE_MAXIMIZED) { Footy2Move footy_id, 0, 0, ginfo_winx, ginfo_winy - statusbar_height sendmsg objinfo_hwnd(id_statusbar), WM_SIZE, SIZE_RESTORED, 0 } return 0 *destroyAccelTable if haccel != 0 { DestroyAcceleratorTable haccel } return *onjump if wparam = 2 { TrackPopupMenu hMenu.1, $100, ginfo(0), ginfo(1), 0, hwnd, 0 if stat = 0 : return dialog "項目 "+stat+" を選択!" return } return *on_exit DestroyMenu hMenu.1 gosub *destroyAccelTable end



この記事に返信する


spider

リンク

2012/4/4(Wed) 22:19:17|NO.45815

onclickの部分を

oncmd gosub *onjump, 0x007B
に変えて、
*on_commandのところに

case IDM_ITEM1 case IDM_ITEM2 case IDM_ITEM3 case IDM_ITEM4 dialog "項目 "+(wparam&0xFFFF)+" を選択!" swbreak
を加えて、
IDM_ITEM1〜IDM_ITEM4の値を6〜8にする。

コレでできると思います。



spider

リンク

2012/4/4(Wed) 22:20:03|NO.45816

失礼しました。
6〜9です。



大富豪A

リンク

2012/4/4(Wed) 23:57:58|NO.45819

>spider様
ご指導ありがとうございます。
spider様のお書きになられましたアドバイス・サンプル誠に有り難う御座います。
つきましてはspider様のご指導を実践してみた結果失礼ながら目的に達することは
出来ませんでした。
私の手違いとゆうことも考えられます。
誠にご無礼ながらもう少し詳しく言って戴けると有り難く思います

なんなんだこの日本語は!?

ときどきいますねー 自分でボケておいて自分でツッコむ人

フザケテイテスミマセン



spider

リンク

2012/4/5(Thu) 08:33:09|NO.45836

う〜ん、わかりませんねぇ。
じぶんも同じようなの作ったけど上手くいったし…



暇人

リンク

2012/4/5(Thu) 20:47:23|NO.45870

>oncmd gosub *onjump, 0x007B
に変更したなら

*onjump if wparam = 2 { TrackPopupMenu hMenu.1, $100, ginfo(0), ginfo(1), 0, hwnd, 0 if stat = 0 : return dialog "項目 "+stat+" を選択!" return } return
右クリックした時しかジャンプしないから
if wparam = 2 {の判定は必要なくなる(てか有るとまずい)
タイトルバー右クリックしても跳んで来るからその対策は必要になるが・・・



大富豪A

リンク

2012/4/5(Thu) 23:45:18|NO.45879

>暇人様
丁寧なご回答をくださり誠にありがとうございました。
暇人様のお陰で無事目的を達することが出来ました。
拙子が無知なせいでもうひとつ質問をさして頂きます。
右クリックに右クリックの判定をするののどこがいけなかったんでしょうか?



暇人

リンク

2012/4/5(Thu) 23:59:31|NO.45880

onclickとoncmdでwparamの内容が違うから
判定が出来なくなる



大富豪A

リンク

2012/4/6(Fri) 22:19:01|NO.45899

>暇人様
有り難うございました。
spider様と暇人様のおかげで解決できました。



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