■簡易ショートカットメニュー

情報

作者名:area
引用元:なし

概要

なでしこの標準機能では利用できない、ショートカットメニューを
WinAPIをラップすることによって無理矢理実装した物です。

このライブラリを使用すると、自分の好きな場所に好きなタイミングでショートカットメニューを
表示させることができるようになります。

また、母艦のタスクトレイ右クリックした時イベントでメニュー展開を行うことにより、
タスクトレイポップアップメニューも実装できます。

なでしこ標準のメニューと似たような感じでメニューの作成、イベントの設定が可能です。
今はまだ機能が少ないですがそのうちアイコン付けられるようにとか
サブメニューつけられるようにとか機能強化していきます。

解説

グループ関数
目的 グループ関数名 引数 引数/関数の意味
メニュー項目を追加する 一括作成 (Sで Sを Sの) S = csv形式のメニュー項目リスト
メニュー項目を削除する 未実装 / /
メニュー項目を初期化する 未実装 / /
メニュー項目にアイコンを付ける 未実装 / /
メニューを表示する メニュー展開 (x,yへxa,yaで) x,y = 表示するX/Y座標 xa,ya = メニューの表示位置
メモリを開放する 開放 なし ※アプリケーションを終了する前に必ず呼び出して下さい

一括作成の使用方法
このライブラリを使って作成するメニューは、なでしこ標準のメニューや
ポップアップメニューとは違う部分があります。

メニュー項目を追加するにはこのように書きます。
テストメニューとは簡易ショートカットメニュー
テストメニューに『表示する文字,イベント//普通のメニュー項目です。
,//こうすると、区切り線を追加することができます。
,テスト,イベント2』を一括作成

注意
このライブラリで作ったショートカットメニューは、なでしこを終了しても
メモリが開放されません。
そのため、自作アプリケーションを終了する前に、以下のようにして
開放してやらなければなりません。
ここでは"テストメニュー"という簡易ショートカットメニューが作成されている物とします。

母艦の閉じた時は~
  テストメニューを開放

こうする事でメモリが開放されます。

使い方が意味不明
説明が下手ですみません、まずサンプルプログラムを実行してみて、そこから自分の使いたいように
改変してもらうと分かってもらえるかなと思います。

分からないところ等あればコメントに書いて頂ければ可能な限り回答します。

独り言
このグループの試作版が出来上がった日に、ここにこのような物が投稿されてるのを見つけました
◆タスクトレイポップアップメニュー
こんな方法があったとは・・・これなら全くなでしこのメニューと同じように記述、作成して
それを利用することが出来ますね
しかも自動で開放されるので面倒な開放命令を書かなくても良いとは・・・
完全に負けました(ヽ'o`)

ほぼ"車輪の再発明"なこのグループですが、もし良ければ使って使ってやってください

//サンプルプログラム

#-------------------------------------------------------------------------------------
# area NakoShortCutMenu Library Sample.
#
# 
# 2009 area
# for "簡易ショートカットメニュー"	v1.0
#-------------------------------------------------------------------------------------
『よくある"クリックすると下にメニューが出る"ボタンです。』と表示

テストメニューとは簡易ショートカットメニュー
テストメニューに『てすてす,「Hello Menu!」という
すてすて,イベント
,
TEST,「特に何もありません」という』を一括作成

タスクトレイメニューとは簡易ショートカットメニュー
タスクトレイメニューに『こういう,
使い方も,
,
あります
,
復帰,母艦をタスクトレイ出す』を一括作成
#-------------------------------------------------------------------------------------
# 終了時にメニューハンドルを開放するように
#-------------------------------------------------------------------------------------
母艦の閉じた時は~
	テストメニューを開放
	タスクトレイメニューを開放

ShowMenuとはボタン
そについて
	Y=100
	W=80
	文字書体=「MS UI Gothic」
	テキスト=『▼ オプション』
	クリックした時は~
		ShowX=母艦の机上クライアントX取得+ShowMenuのX
		ShowY=母艦の机上クライアントY取得+ShowMenuのY+ShowMenuのH
		テストメニューをShowX,ShowYへ空,空でメニュー展開

TaskModeとはボタン
そについて
	文字書体=「MS UI Gothic」
	テキスト=『タスクトレイモード』
	W=100
	クリックした時は~
		母艦をタスクトレイ入れる

*イベント
	「関数も指定できます。」という

#-------------------------------------------------------------------------------------
# ボタンの下の正確な位置にメニューを表示させるための関数
# 
# 改変元:なでおやじさん作"机上母艦クライアント位置取得" 
#-------------------------------------------------------------------------------------
●机上クライアントX取得({グループ}OBJの)
 OBJ→X+(OBJ→W-OBJ→CW)/2で戻る

●机上クライアントY取得({グループ}OBJの)
 (OBJ→H+OBJ→Y)-(OBJ→W-OBJ→CW)/2-OBJ→CHで戻る

//本体

■簡易ショートカットメニュー
	・オブジェクト
	・ポケット
	・タグ
	・命令シート
	・作る~
		オブジェクト=CreatePopupMenu()
	・一括作成(Sで|Sを|Sの)~
		Sで反復
			対象=それ
			もし対象\0[0]=『,』なら
				AppendMenuA(オブジェクト,$00000800,(回数),0)
				空を命令シートに一行追加
			違えば
				AppendMenuA(オブジェクト,$0,(回数),対象\0[0])
				対象\0[1]を命令シートに一行追加
	・メニュー展開({参照渡し}x,{参照渡し}yへ{値渡し}xa,{値渡し}yaで)~
		xa=xa//値渡し補助
		ya=ya//〃
		xaで条件分岐
			『右』なら
				XALIGN=$8
			『中央』なら
				XALIGN=$4
			違えば
				XALIGN=$0
		yaで条件分岐
			『下』なら
				YALIGN=$20
			『中央』なら
				YALIGN=$10
			違えば
				YALIGN=$0
		TrackPopupMenuEx(オブジェクト,XALIGN+YALIGN+$100,x,y,母艦のハンドル,0)
		もし、(それ=0)=0なら
			命令シート\(それ-1)をナデシコする
	・開放~
		DestroyMenu(オブジェクト)
		壊す
	・壊す~

●CreatePopupMenu =DLL("user32.dll",
"HMENU CreatePopupMenu(VOID)")

●AppendMenuA(hMenu,uFlags,uIDItem,pItem) =DLL("user32.dll",
"BOOL AppendMenuA(
    HMENU  hMenu,   // メニューハンドル
    UINT   uFlags,  // オプションフラグ
    UINT   uIDItem, // アイテムIDまたはサブMenuーハンドル
    PCTSTR pItem    // 表示する文字列
)")

●DestroyMenu(hMenu) =DLL("user32.dll",
"BOOL DestroyMenu(
    HMENU hMenu     // メニューハンドル
)")

●TrackPopupMenuEx(hMenu,fuFlags,x,y,hWnd,ptpm) =DLL("user32.dll",
"BOOL TrackPopupMenuEx(
    HMENU hMenu,       // メニュハンドル
    UINT  fuFlags,     // オプションフラグ
    int   x,           // x座標
    int   y,           // y座標
    HWND  hWnd,        // ウィンドウハンドル
    LPTPMPARAMS ptpm   // オーバーラップ禁止範囲
)")



名前:
コメント:


タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年05月31日 17:28
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。