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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0313
ゆーコンテキストメニューやメニューバーにチェックマークを出す方法4解決


ゆー

リンク

2018/3/13(Tue) 07:53:59|NO.82739

コンテキストメニューやメニューバーにチェックマークを出す方法を教えください。
http://blog.hiros-dot.net/wp-content/uploads/2013/06/image079.png
ググっても見つからなかったので質問します。



この記事に返信する


あまら

リンク

2018/3/13(Tue) 21:47:00|NO.82743

メニューバー作成モジュール使用

モジュールに項目の状態を変化させる命令もあると思っていたんですが、
最低限の命令(メニュー作成・項目追加・ウィンドウに配置)しかなかったんですね。

言語問わずで検索すると結構見つかるんですが
API等が使えないとこの辺はわからないですよね。


#include "mod_menu.as" #define CMD_A 1 #define CMD_B 2 #define CMD_QUIT 3 #define MFS_CHECKED 0x08 #define MFS_UNCHECKED 0x00 #uselib "user32.dll" #func global CheckMenuItem "CheckMenuItem" int, int, int oncmd gosub *OnCommand, WM_COMMAND // メッセージ割り込み // サブメニュー作成 newmenu hsubmenu, 1 addmenu hsubmenu, "チェック1(&A)", CMD_A, 0x0000 // チェックマーク無し check1f = 0; addmenu hsubmenu, "チェック2(&B)", CMD_B, 0x0008 // チェックマーク付き check2f = 1; addmenu hsubmenu, "", 0, 0x0800 // セパレータ addmenu hsubmenu, "終了(&Q)", CMD_QUIT // トップメニュー作成 newmenu hmenu, 0 addmenu hmenu, "メニュー(&M)", hsubmenu, 0x10 applymenu hmenu stop //メッセージの処理 *OnCommand cmd = wparam & 0xFFFF if( cmd == CMD_A ) { // チェック1項目の処理 if( check1f ) { // チェック済みならばチェックを外す check1f = 0; CheckMenuItem hsubmenu, CMD_A, MFS_UNCHECKED; } else { // チェックされていなければ、チェックする check1f = 1; CheckMenuItem hsubmenu, CMD_A, MFS_CHECKED; } } else:if( cmd == CMD_B ) { // チェック2項目の処理 if( check2f ) { // チェック済みならばチェックを外す check2f = 0; CheckMenuItem hsubmenu, CMD_B, MFS_UNCHECKED; } else { // チェックされていなければ、チェックする check2f = 1; CheckMenuItem hsubmenu, CMD_B, MFS_CHECKED; } } else:if( cmd == CMD_QUIT ): end return



ゆー

リンク

2018/3/14(Wed) 22:38:01|NO.82752

>あまらさん
ありがとうございます。
返信遅くなってすみません。

コンテキストメニュー(右クリックメニュー)ではどうやるんでしょうか?



あまら

リンク

2018/3/14(Wed) 23:10:11|NO.82753

どちらもやることは同じです。

APIの『CheckMenuItem』を使い
CheckMenuItem メニューのハンドル, 項目のID, チェック状態

という形で3つの引数を設定するだけです。

項目のIDは前回のソースであればCMD_A、CMD_B、CMD_QUIT
今回のソースではIDM_ITEM1〜4がIDになります。

チェック状態はMFS_CHECKEDがチェック、MFS_UNCHECKEDがチェック無しという意味です。


今回のソースはKpanさんのソースに手を加えさせていただきました。
http://lhsp.s206.xrea.com/hsp_menu.html#2

// ポップアップメニューの表示サンプルソース (by Kpan) // (注) エディタの[HSP]メニュー→[HSP拡張マクロを使用する]を要有効。 #include "user32.as" ; 項目ID #enum IDM_ITEM1 = 1 #enum IDM_ITEM2 #enum IDM_ITEM3 #enum IDM_ITEM4 #define MFS_CHECKED 0x08 #define MFS_UNCHECKED 0x00 // チェックフラグ dim checkf, 4; checkf = 0, 0, 0, 0; // 全てチェック無しにしておく onclick gosub *onjump ; マウスをクリックした時 ; あるいはWM_CONTEXTMENU ; oncmd gosub *onjump, $7B onexit *exit ; <サブのポップアップメニュー> ; サブメニューを作成し、ハンドルを取得 CreatePopupMenu hMenu.0 = stat ; 第3パラはメニュー項目ID 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" ; 第2パラを$800にするとセパレータ(区切り線)になる。 AppendMenu hMenu.1, $800, 0, "" AppendMenu hMenu.1, 0, IDM_ITEM2, "メニュー項目 2" ; 第2パラメータを$10にするとサブメニューへ。 ; 第3パラにサブメニューのハンドルを入れる。 AppendMenu hMenu.1, $10, hMenu.0, "サブメニュー" stop *onjump ; 右クリックされた時 if wparam = 2 { ; ポップアップメニュー表示。第1パラに開くメニューのハンドル TrackPopupMenu hMenu.1, $100, ginfo(0), ginfo(1), 0, hwnd, 0 if stat = 0 : return ; 選択キャンセル cmd == stat; ; statにメニュー項目ID dialog "項目 "+stat+" を選択!" if( cmd < 3 ) { // メニュー項目1と2の処理 if( checkf(cmd-1) ) { // チェック済みならばチェックを外す checkf(cmd-1) = 0; CheckMenuItem hMenu.1, cmd, MFS_UNCHECKED; } else { // チェックされていなければ、チェックする checkf(cmd-1) = 1; CheckMenuItem hMenu.1, cmd, MFS_CHECKED; } } else { // サブメニュー項目3と4の処理 if( checkf(cmd-1) ) { // チェック済みならばチェックを外す checkf(cmd-1) = 0; CheckMenuItem hMenu.0, cmd, MFS_UNCHECKED; } else { // チェックされていなければ、チェックする checkf(cmd-1) = 1; CheckMenuItem hMenu.0, cmd, MFS_CHECKED; } } return } return *exit ; どこのウィンドウにも張り付いていないメニューは明示的に破棄 DestroyMenu hMenu.1 end



ゆー

リンク

2018/3/16(Fri) 13:36:36|NO.82759

ありがとうございます!!



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