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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0723
NEW kerupaniプラグインモジュールmod_menuの「メニュー」について14解決


NEW kerupani

リンク

2010/7/23(Fri) 19:44:42|NO.33864

HSP.3.21で、プラグインモジュールmod_menuの「メニュー」で、メニューを作成した後に
任意のメニュー項目の属性を変えるにはどうしたらいいんですか?
あと、addmenu命令の第4パラメータは全てで以下のしかないんですか?
(あるのだったら、それが載っているサイトなどを教えてくれると助かります。)

(↓組み合わせるのを除いて。)
0x0000:デフォルト表示
0x0003:灰色表示・選択不可
0x0008:アイテムにチェックマークを付ける
0x0010:ドロップダウンメニューまたはサブメニューを開くアイテムを追加
0x0800:セパレータ(区切り線)を表示



この記事に返信する


f3d

リンク

2010/7/23(Fri) 20:18:13|NO.33865

こんにちわ^^

作り直せばできますよ^^

#include "mod_menu.as" #define CMD_A 1 #define CMD_B 2 #define CMD_D 3 #define CMD_QUIT 4 // メニューC直下のサブメニュー作成 newmenu hsubmenu2, 1 addmenu hsubmenu2, "メニューD(&D)", CMD_D // サブメニュー作成 newmenu hsubmenu, 1 addmenu hsubmenu, "メニューA(&A)", CMD_A, 0x0003 // 灰色表示・選択不可 addmenu hsubmenu, "メニューB(&B)", CMD_B, 0x0008 // チェックマーク付き addmenu hsubmenu, "メニューC(&C)", hsubmenu2, 0x0010 // サブメニューあり addmenu hsubmenu, "", 0, 0x0800 // セパレータ addmenu hsubmenu, "終了(&Q)", CMD_QUIT // トップメニュー作成 newmenu hmenu, 0 addmenu hmenu, "メニュー(&M)", hsubmenu, 0x10 applymenu hmenu wait 1000 // メニューC直下のサブメニュー作成 newmenu hsubmenu2, 1 addmenu hsubmenu2, "メニ8(&D)", CMD_D // サブメニュー作成 newmenu hsubmenu, 1 addmenu hsubmenu, "メニュうー4(&A)", CMD_A, 0x0008 // 灰色表示・選択不可 addmenu hsubmenu, "メニ5ーんB(&B)", CMD_B, 0x0003 // チェックマーク付き addmenu hsubmenu, "メ7ューCこ(&C)", hsubmenu2, 0x003 // サブメニューあり addmenu hsubmenu, "", 0, 0x0800 // セパレータ addmenu hsubmenu, "終u了(&Q)", CMD_QUIT // トップメニュー作成 newmenu hmenu, 0 addmenu hmenu, "メニュー(&M)", hsubmenu, 0x10 applymenu hmenu

このスクリプトを参考にして作ったスクリプトを
「勝手に使わないで」などと書いて転載を禁止されるのはやめてくださいね^^
僕ちゃんはそういうのがだいっ嫌いです^^



info

リンク

2010/7/23(Fri) 21:28:04|NO.33866

API の SetMenuItemInfo 命令と
MENUITEMINFO 構造体を使用すれば、メニューに関する色々な設定をすることが出来ますが
HSP からするのは少し面倒くさいです。

調べる気力がなければ、モジュールを使った方間違いなく早いです。
 一応スクリプトの例を載せておきます。

NewMenu で作られた ハンドルは、CreateMenu CreatePopupMenu で作られたハンドルと同じものなので。
SetMenuItemInfo ほか さまざまなメニュー操作関数を使用することも出来ます、暇だったら調べてみたらいいと思います。


#include "user32.as" // ウインドウメッセージ WM_COMMAND #define WM_COMMAND $00000111 // MENUITEMINFO 構造体 の インデックスの定義。 #enum mii_cbSize = 0 // 構造体のサイズ #enum mii_fMask // 取得または設定するメンバ // fMaskの定数 の一部 #const MIIM_STRING $00000040 ; Windows 98/2000 以降: dwTypeData #const MIIM_BITMAP $00000080 ; Windows 98/2000 以降: hbmpItem #const MIIM_STATE $00000001 ; fState #enum mii_fType // アイテムのタイプ #enum mii_fState // アイテムの状態 // fState の定数の一部 #const MFS_CHECKED $00000008 #const MFS_DEFAULT $00001000 #enum mii_wID // アイテムID #enum mii_hSubMenu // サブメニューのハンドル #enum mii_hbmpChecked // チェック表示時のビットマップ #enum mii_hbmpUnchecked // チェック非表示時のビットマップ #enum mii_dwItemData // 任意の32ビット値 #enum mii_dwTypeData // アイテムの内容 #enum mii_cch // アイテムの文字列の長さ #enum mii_hbmpItem // ビットマップハンドル // hbmpItemの定数の一部 #const HBMMENU_POPUP_CLOSE $00000008 ; サブメニューの「閉じる」ボタン #enum MENUITEMINFO_ELETOTAL ; total 12 // EnableMenuItemの定数 #define MF_BYCOMMAND $00000000 #define MF_GRAYED $00000001 // 作業用の構造体の定義 ; 文字列を変更するための MENUITEMINFO 構造体 string = "" dim mii_string , MENUITEMINFO_ELETOTAL mii_string.mii_cbSize = MENUITEMINFO_ELETOTAL*4 mii_string.mii_fMask = MIIM_STRING mii_string.mii_dwTypeData = varptr( string ) // メニューに表示する文字列 mii_string.mii_cch = strlen( string ) // 文字数 ; ビットマップ を変更するための MENUITEMINFO 構造体 dim mii_bitmap , MENUITEMINFO_ELETOTAL mii_bitmap.mii_cbSize = MENUITEMINFO_ELETOTAL*4 mii_bitmap.mii_fMask = MIIM_BITMAP mii_bitmap.mii_hbmpItem = 0 // ビットマップのハンドル ; STATUS を変更するための MENUITEMINFO 構造体 dim mii_stat , MENUITEMINFO_ELETOTAL mii_stat.mii_cbSize = MENUITEMINFO_ELETOTAL*4 mii_stat.mii_fMask = MIIM_STATE mii_stat.mii_fState = 0 // STATUSのフラグ ;--------------------------------------- // メニューID #enum MID_EXIT = 1 #enum MID_MODIFY #enum MID_GAGAGA #enum MID_AFTERGA onexit *exit oncmd gosub *msg_WM_COMMAND , WM_COMMAND // メニューを作る dim hMenu , 2 CreatePopUpMenu : hMenu(1) = stat AppendMenu hMenu(1) , 0 , MID_GAGAGA , "GAGAGA(&G)" AppendMenu hMenu(1) , 0 , MID_MODIFY , "色々変更(&M)" AppendMenu hMenu(1) , 0x800 , 0,0 AppendMenu hMenu(1) , 0 , MID_EXIT , "終了する(&Q)" CreateMenu : hMenu(0) = stat AppendMenu hMenu , 0x10 , hMenu(1) , "メニュ(&M)" SetMenu hwnd , hMenu DrawMenuBar hwnd mes "「 色々変更(&R) 」 のメニュー を選択してみて下さい" stop *msg_WM_COMMAND wID = wParam & 0xFFFF ; loword wNotifyCode = (wParam >> 16) & 0xFFFF ; hiword hwndControl = lParam switch wID case MID_GAGAGA dialog "が" swbreak case MID_EXIT end swbreak case MID_MODIFY // メニューGa の文字列を変更 string = "変更されました(&C)" mii_string.mii_dwTypeData = varptr( string ) // メニューに表示する文字列 mii_string.mii_cch = strlen( string ) // 文字数 SetMenuItemInfo hMenu.1 , MID_GAGAGA , 0 , varptr( mii_string ) mii_stat.mii_fState = MFS_DEFAULT | MFS_CHECKED // STATUSのフラグ SetMenuItemInfo hMenu.1 , MID_GAGAGA , 0 , varptr( mii_stat ) // 終了メニューの変更 string = "終了?(&Q)" mii_string.mii_dwTypeData = varptr( string ) // メニューに表示する文字列 mii_string.mii_cch = strlen( string ) // 文字数 SetMenuItemInfo hMenu.1 , MID_EXIT , 0 , varptr( mii_string ) mii_bitmap.mii_hbmpItem = HBMMENU_POPUP_CLOSE SetMenuItemInfo hMenu.1 , MID_EXIT , 0 , varptr( mii_bitmap ) string = "もう使えません(&Q)" mii_string.mii_dwTypeData = varptr( string ) // メニューに表示する文字列 mii_string.mii_cch = strlen( string ) // 文字数 SetMenuItemInfo hMenu.1 , MID_MODIFY , 0 , varptr( mii_string ) DrawMenuBar hwnd // 変更メニューを 無効化 EnableMenuItem hMenu.1 , MID_MODIFY , MF_BYCOMMAND | MF_GRAYED swbreak swend return *exit DestroyMenu hMenu end



NEW kerupani

リンク

2010/7/24(Sat) 09:30:04|NO.33871

みなさん回答ありがとうございます。
>作り直せばできますよ^^
全ては書きかえられるのですね。
その点ではわかりました。ありがとうございます。
それでは、任意のだけを変えることはできないのでしょうか…?

>MENUITEMINFO 構造体を使用すれば、メニューに関する色々な設定をすることが出来ますが
>HSP からするのは少し面倒くさいです。
ソースを書いてくれてありがとうございます。
わざわざ書かせておいてこういうのも申し訳ないんですが、あらかじめ最初に
書いておけばよかったのですが、実は、チェックの入/切を変更したいんです。
あとからで申し訳ありません。
あなたのソースの
>mii_stat.mii_fState = MFS_DEFAULT | MFS_CHECKED // STATUSのフラグ
>SetMenuItemInfo hMenu.1 , MID_GAGAGA , 0 , varptr( mii_stat )
のところで変更しているんでしょうか?
これはソース上で定義されている定数ですよね?
ということは0にすれば普通の(デフォルト表示)になるんでしょうか?



info

リンク

2010/7/24(Sat) 15:12:02|NO.33873

はいそうです。



一応 MFS_UNCHECKED という定数が有りますが、それは 内部でゼロなので。
構造体の fStat のメンバの内容を [ 0x0 と 0x8 ] と切り替えて SetMenuItemInfo すれば、
チェック状態を切り替えることが出来ます。

一応 CheckMenuItem という関数もあります。
構造体をセットするのが面倒ならそれを使うという手もありますが、古い関数なので、
SetMenuItemInfo を使った方が良いみたいです。


#include "user32.as" // ウインドウメッセージ WM_COMMAND #define WM_COMMAND $00000111 // MENUITEMINFO 構造体 の インデックスの定義。 #enum mii_cbSize = 0 // 構造体のサイズ #enum mii_fMask // 取得または設定するメンバ // fMaskの定数 の一部 #const MIIM_STATE $00000001 ; fState #enum mii_fType // アイテムのタイプ #enum mii_fState // アイテムの状態 // fState の定数の一部 #const MFS_UNCHECKED $00000000 #const MFS_CHECKED $00000008 #enum mii_wID // アイテムID #enum mii_hSubMenu // サブメニューのハンドル #enum mii_hbmpChecked // チェック表示時のビットマップ #enum mii_hbmpUnchecked // チェック非表示時のビットマップ #enum mii_dwItemData // 任意の32ビット値 #enum mii_dwTypeData // アイテムの内容 #enum mii_cch // アイテムの文字列の長さ #enum mii_hbmpItem // ビットマップハンドル #enum MENUITEMINFO_ELETOTAL ; total 12 // CheckMenuItemの定数 #define MF_UNCHECKED $00000000 #define MF_CHECKED $00000008 #define MF_BYCOMMAND $00000000 // 作業用の構造体の定義 ; STATUS を変更するための MENUITEMINFO 構造体 dim mii_stat , MENUITEMINFO_ELETOTAL mii_stat.mii_cbSize = MENUITEMINFO_ELETOTAL*4 mii_stat.mii_fMask = MIIM_STATE mii_stat.mii_fState = 0 // STATUSのフラグ ;--------------------------------------- // メニューID #enum MID_EXIT = 1 #enum MID_MODIFY #enum MID_GAGAGA onexit *exit oncmd gosub *msg_WM_COMMAND , WM_COMMAND // メニューを作る dim hMenu , 2 CreatePopUpMenu : hMenu(1) = stat AppendMenu hMenu(1) , 0 , MID_GAGAGA , "check変更サンプル「SetMenuItemInfo使用」(&S)" AppendMenu hMenu(1) , 0 , MID_MODIFY , "check変更サンプル「CheckMenuItem使用」(&C)" AppendMenu hMenu(1) , 0x800 , 0,0 AppendMenu hMenu(1) , 0 , MID_EXIT , "終了する(&Q)" CreateMenu : hMenu(0) = stat AppendMenu hMenu , 0x10 , hMenu(1) , "メニュ(&M)" SetMenu hwnd , hMenu DrawMenuBar hwnd mes "check変更には二つの方法が有ります。" stop *msg_WM_COMMAND wID = wParam & 0xFFFF ; loword wNotifyCode = (wParam >> 16) & 0xFFFF ; hiword hwndControl = lParam switch wID case MID_GAGAGA if mii_stat.mii_fState { mii_stat.mii_fState = 0x0 // MFS_UNCHECKED }else{ mii_stat.mii_fState = 0x8 // MFS_CHECKED } SetMenuItemInfo hMenu.1 , MID_GAGAGA , 0 , varptr( mii_stat ) DrawMenuBar hwnd dialog "新しい方法です。新しく作るアプリケーションはこの方法を使って、ステータスを変えるべきです" swbreak case MID_MODIFY if flg_CheckedMod { flg_CheckedMod = 0x0 // MF_UNCHECKED }else{ flg_CheckedMod = 0x8 // MF_CHECKED } CheckMenuItem hMenu.1 , MID_MODIFY , MF_BYCOMMAND | flg_CheckedMod dialog "古い方法ですが、まだ使えるみたいです。" swbreak case MID_EXIT end swbreak swend return *exit DestroyMenu hMenu end



NEW kerupani

リンク

2010/7/24(Sat) 18:05:18|NO.33882

おおお!解決しました。ありがとうございます。
わざわざサンプルをまた書かせてしまってすいません。
この方法を私の作成しているソフトで使用したいのですが、どうしたらいいですか?
ReadMeとかに、「感謝:infoさん(HSP3掲示板にて)」とでも書いた方がいいでしょうか?

(もとの質問は解決しましたが、この質問をするので一応「未解決」にしておきます。
すいません。と、いうか、「解決」にすると、返信できなくなるんですか?この掲示板の
「使い方」を見てもわからなかったんですが…。)



msclover作者

リンク

2010/7/24(Sat) 21:34:13|NO.33901

そういうのが「恩着せがましい」っていうんだよ。
皆、ろくでもない実力で作った他人のソフトウェアに自分の名前を載せたくて教えてるわけじゃねぇんだよ。

礼を言う前にメニューAPIで他にどういったことが出来るのか調べて自分の「知識」にしろ。



テック

リンク

2010/7/24(Sat) 21:54:28|NO.33904

>(もとの質問は解決しましたが、この質問をするので一応「未解決」にしておきます。
>すいません。と、いうか、「解決」にすると、返信できなくなるんですか?この掲示板の
>「使い方」を見てもわからなかったんですが…。)
他のスレを見てもらえるとわかるかもしれませんが、
「解決」にするのは、スレを立てた人で、
「解決」にしたあとでも、追記のレスを送信できますし、
またスレ主以外も、返信できます。



ORZ

リンク

2010/7/25(Sun) 00:16:46|NO.33907

NO.33901が真理。

どや顔で、自分が作ったかのようにブログにのっけて
勝手に使わないで、とかやんなきゃいいの。常識的に相手の事を考えればトーゼン。
答えてくれた人は別に利益を求めてるわけじゃないの。



あり

リンク

2010/7/25(Sun) 10:51:05|NO.33918

まさか感謝の意を表される事すら拒絶する人がいるとは思いませんでしたが
同じ事を言うにしてももう少し穏やかな言葉を選べないものでしょうか?
>掲示板は大勢の人が利用するものです。不快になるような発言や威圧的な態度は取らないでください。

>ReadMeとかに、「感謝:infoさん(HSP3掲示板にて)」とでも書いた方がいいでしょうか?

本人への確認もなく名前を載せるのは確かに問題もあると思うので
どうしても感謝の意を表したいのであれば

感謝:HSP3掲示板で助言して頂きました。
等や、多少堅苦しい表現にするなら

本ソフトの制作にあたってHSP3掲示板で御助言を頂きました方々の ご厚意に感謝いたします。
というような記述で良いのではないかと思います。



info

リンク

2010/7/25(Sun) 19:31:26|NO.33940

 他の方々の意見にも一理あると思いますが。
 お礼の件は、全然大丈夫ですよ。

  



msclover作者

リンク

2010/7/25(Sun) 22:00:42|NO.33960

>No.33918
「ごめんなさい」とでも書いておきます。







「とでも」のニュアンスがよく分かる例文でした。



NEW kerupani

リンク

2010/7/26(Mon) 11:38:30|NO.33971

Re.NO.33901
別にどうしても感謝の気持ちを書きたいとかではなく(まあ、実際感謝してるんですが)、
著作権とかで問題が発生すると困るので書いてるんです。
実際に配布するときとかにはReadMeに、どこのホームページを参考にしたとか、だれに
アドバイスをもらったとか書いておかないと、他人が頑張ったのに自分で利益を独占してる
みたいでいやなんです。

Re.NO.33904
わかりました、
回答(? 返信?)ありがとうございました。

Re.NO.33907
>どや顔で、自分が作ったかのようにブログにのっけて
>勝手に使わないで、とかやんなきゃいいの。
?
ですから、他人から助言を受けたりしたのは書いてありますが…。
しかもそれは著作権の問題とかがからむと困るから書いているんです。
もし、「他人から助言を受けたりしたの」を書き忘れていたのがありましたらURLも報告し
て下さい。

Re.NO.33918
>本人への確認もなく名前を載せるのは確かに問題もあると思うので
NO.33882でinfoさんに聞きました。
↓で確認を得ました。

Re.NO.33940
わかりました。

Re.NO.33960
>「とでも」のニュアンス
引用を示す格助詞「と」+大まかな例示をする副助詞「でも」



あり

リンク

2010/7/26(Mon) 12:04:05|NO.33972

>>本人への確認もなく名前を載せるのは確かに問題もあると思うので
>NO.33882でinfoさんに聞きました。
>↓で確認を得ました。
正しくは
『本人への確認(又は許可)が取れないままで名前を載せるのは』ですね
もしinfoさんが返答(許可)しなかった場合の対処法のつもりでした。
分かり難い文章でした、すみません。

ただ、NEW kerupaniさんはinfoさんだけに質問していたつもりだったのでしょうが
アンカーが無いと今回の様に全員に発言していると勘違いされてしまうので
そこは気をつけましょうね。



NEW kerupani

リンク

2010/7/26(Mon) 12:19:34|NO.33974

Re.NO.33972
>アンカーが無いと今回の様に全員に発言していると勘違いされてしまうので
NO.33882の質問のことですか。
すいません。



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