|
|
2018/9/12(Wed) 14:56:09|NO.85324
今、メモ帳のようなものを作っています。
そこで、ツールバーを作っているのですがこのコードだと、どうしても「開く(ctrl+O)」
を押そうとするとmesboxにかぶってしまいます。
どうすればよいでしょうか?
//ソース
*startup
buffer 1
picload "button.png"
gsel 1
screen 0,640,480
sdim box
*main
#include "user32.as"
screen 0,ginfo_dispx,ginfo_dispy,0,,,ginfo_winx,ginfo_winy:GetWindowLong hwnd, -16:SetWindowLong hwnd, -16, stat | $10000 | $40000
objimage 1,0,0,0,20,0,20
objsize 100,20
pos 0,0
button "ファイル(F)",*F
pos 100,0
button "編集(E)",*main
pos 200,0
button "フォント(O)",*main
pos 300,0
button "表示(V)",*main
pos 400,0
button "圧縮(Z)",*main
pos 500,0
button "大きさを修正(B)",*main
pos 600,0
button "ヘルプ(H)",*main
pos 0,20
mesbox box,ginfo_winx,ginfo_winy-20,1,0
stop
*F
pos 0,20
button "開く(ctrl+O)",*F_O
stop
*F_O
|
|
2018/9/12(Wed) 15:03:20|NO.85325
「HSP メニューバー」で検索!!
|
|
2018/9/12(Wed) 17:26:54|NO.85327
メニューバー作成用のモジュール「mod_menu.as」なんかも付属されているので
そちらを活用してみてはいかがでしょうか。
F1ヘルプの「その他」→「mod_menu:メニューバー作成」を見てください。
|
|
2018/9/13(Thu) 11:53:00|NO.85328
> そこで、ツールバーを作っているのですがこのコードだと、どうしても「開く(ctrl+O)」
メニューバーの事ですね。
#include "User32.as"
//--------------------------------------
// マクロ命令(メニュー作成)
//--------------------------------------
#define global MenuEnumBegin(%1,%2) CreatePopupMenu:h=stat:%1=stat:n=%2 ;%1=hMenu,%2=nID
#define global MenuEnumMenu(%1,%2) AppendMenu h,$00000010,%2,%1 ;%1=文字列,%2=hMenu
#define global MenuEnumText(%1) AppendMenu h,$00000000,n,%1:n++ ;%1=文字列
#define global MenuEnumGray(%1) AppendMenu h,$00000001,n,%1:n++ ;%1=文字列
#define global MenuEnumLine AppendMenu h,$00000800,0,$0
#define global MenuEnumEnd
#
#define global MenuBarBegin(%1) CreateMenu:hh=stat:%1=stat ;%1=hMenuBar
#define global MenuBarItem(%1,%2) AppendMenu hh,$00000010,%2,%1 ;%1=文字列,%2=hSub
#define global MenuBarEnd SetMenu hWnd,hh:DrawMenuBar hWnd
//--------------------------------------
// メニューバーの作成
//--------------------------------------
;ファイル(F)
MenuEnumBegin hSub(1),1001
MenuEnumText "新規(&N)\tCtrl+N"
MenuEnumText "開く(&O)...\tCtrl+O"
MenuEnumText "上書き保存(&S)\tCtrl+S"
MenuEnumText "名前を付けて保存(&A)..."
MenuEnumLine
MenuEnumText "ページ設定(&U)..."
MenuEnumText "印刷(&P)...\tCtrl+P"
MenuEnumLine
MenuEnumText "メモ帳の終了(&X)"
MenuEnumEnd
;編集(E)
MenuEnumBegin hSub(2),2001
MenuEnumText "元に戻す(&U)\tCtrl+Z"
MenuEnumLine
MenuEnumText "切り取り(&T)\tCtrl+X"
MenuEnumText "コピー(&C)\tCtrl+C"
MenuEnumText "貼り付け(&P)\tCtrl+V"
MenuEnumText "削除(&L)\tDel"
MenuEnumLine
MenuEnumGray "検索(&F)...\tCtrl+F"
MenuEnumGray "次を検索(&N)\tF3"
MenuEnumText "置換(&R)...\tCtrl+H"
MenuEnumText "次へ移動(&G)...\tCtrl+G"
MenuEnumLine
MenuEnumText "すべて選択(&A)\tCtrl+A"
MenuEnumText "日付と時刻(&D)\tF5"
MenuEnumEnd
;書式(O)
MenuEnumBegin hSub(3),3001
MenuEnumText "右端で折り返す(&W)"
MenuEnumText "フォント(&F)..."
MenuEnumEnd
;表示(V)
MenuEnumBegin hSub(4),4001
MenuEnumText "ステータス バー(&S)"
MenuEnumEnd
;ヘルプ(H)
MenuEnumBegin hSub(5),5001
MenuEnumText "ヘルプの表示(&H)"
MenuEnumLine
MenuEnumText "バージョン情報(&A)"
MenuEnumEnd
;メニューバーの作成
MenuBarBegin hMenuBar
MenuBarItem "ファイル(&F)" ,hSub(1)
MenuBarItem "編集(&E)" ,hSub(2)
MenuBarItem "書式(&O)" ,hSub(3)
MenuBarItem "表示(&V)" ,hSub(4)
MenuBarItem "ヘルプ(&H)" ,hSub(5)
MenuBarEnd
こんな感じでどうでしょうか?

| |
|
2018/9/13(Thu) 17:46:15|NO.85329
追記。
メニューバーを選択すると WM_COMMAND メッセージに情報を送ります。
そこで oncmd で WM_COMMAND メッセージを受け取れるサンプルです。
//------------------------------------------------------------------------------
// メニューバーのサンプル by 科学太郎
//==============================================================================
// @URL(http://hsp.tv/play/pforum.php?mode=all&num=85324)→「ツールバーの作り方について」
//------------------------------------------------------------------------------
// @URL(http://wisdom.sakura.ne.jp/system/winapi/win32/win77.html)→「メニューメッセージ」
// @URL(http://wisdom.sakura.ne.jp/system/winapi/win32/win80.html)→「メニューのソース定義」
// @URL(http://wisdom.sakura.ne.jp/system/winapi/win32/win81.html)→「メニューの削除」
//------------------------------------------------------------------------------
#include "User32.as"
#include "Shell32.as"
//--------------------------------------
// 記号定数(API定数)
//--------------------------------------
#const global NULL 0
#const global MAX_PATH 1024
#const global WM_COMMAND $00000111
#const global WM_DROPFILES $00000233
#const global WM_EXITSIZEMOVE $00000232
#const global WM_SIZING $00000214
#
#const global WM_CUT $00000300
#const global WM_COPY $00000301
#const global WM_PASTE $00000302
#const global WM_CLEAR $00000303
#const global WM_UNDO $00000304
#
#const global GWL_STYLE $FFFFFFF0
#const global WS_OVERLAPPEDWINDOW $00CF0000;(WS_OVERLAPPED|WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_THICKFRAME|WS_SYSMENU|WS_CAPTION)
#
#const global GWL_EXSTYLE $FFFFFFEC
#const global WS_EX_ACCEPTFILES $00000010
#
#const global SWP_NOSIZE $00000001
#const global SWP_NOMOVE $00000002
#const global SWP_NOZORDER $00000004
#const global SWP_FRAMECHANGED $00000020
//--------------------------------------
// マクロ命令(メニュー作成)
//--------------------------------------
#define global MenuEnumBegin(%1,%2) CreatePopupMenu:h=stat:%1=stat:n=%2 ;%1=hMenu,%2=nID
#define global MenuEnumMenu(%1,%2) AppendMenu h,$00000010,%2,%1 ;%1=文字列,%2=hMenu
#define global MenuEnumText(%1) AppendMenu h,$00000000,n,%1:n++ ;%1=文字列
#define global MenuEnumGray(%1) AppendMenu h,$00000001,n,%1:n++ ;%1=文字列
#define global MenuEnumLine AppendMenu h,$00000800,0,$0
#define global MenuEnumEnd
#
#define global MenuBarBegin(%1) CreateMenu:hh=stat:%1=stat ;%1=hMenuBar
#define global MenuBarItem(%1,%2) AppendMenu hh,$00000010,%2,%1 ;%1=文字列,%2=hSub
#define global MenuBarEnd SetMenu hWnd,hh:DrawMenuBar hWnd
//--------------------------------------
// メイン部
//--------------------------------------
*Main
screen 0,ginfo_dispX,ginfo_dispY,SCREEN_NORMAL,,,640,480
title "メニューバーのサンプル by 科学太郎"
;設定
GetWindowLong hWnd,GWL_STYLE
SetWindowLong hWnd,GWL_STYLE,stat|WS_OVERLAPPEDWINDOW
GetWindowLong hWnd,GWL_EXSTYLE
SetWindowLong hWnd,GWL_EXSTYLE,stat|WS_EX_ACCEPTFILES
SetWindowPos hWnd,NULL,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED
;割込
oncmd gosub *OnCommand, WM_COMMAND
oncmd gosub *OnDropFiles, WM_DROPFILES
oncmd gosub *OnSizing, WM_EXITSIZEMOVE
oncmd gosub *OnSizing, WM_SIZING
;作成
CreateMenuBar
;配置
sdim sBuff,1024*1024
mesbox sBuff,ginfo_winX,ginfo_winY,5,0
stop
//--------------------------------------
// メニューバーの作成
//--------------------------------------
#deffunc CreateMenuBar\
local hSub,\
local hMenuBar
;ファイル(F)
MenuEnumBegin hSub(1),1001
MenuEnumText "新規(&N)\tCtrl+N"
MenuEnumText "開く(&O)...\tCtrl+O"
MenuEnumText "上書き保存(&S)\tCtrl+S"
MenuEnumText "名前を付けて保存(&A)..."
MenuEnumLine
MenuEnumText "ページ設定(&U)..."
MenuEnumText "印刷(&P)...\tCtrl+P"
MenuEnumLine
MenuEnumText "メモ帳の終了(&X)"
MenuEnumEnd
;編集(E)
MenuEnumBegin hSub(2),2001
MenuEnumText "元に戻す(&U)\tCtrl+Z"
MenuEnumLine
MenuEnumText "切り取り(&T)\tCtrl+X"
MenuEnumText "コピー(&C)\tCtrl+C"
MenuEnumText "貼り付け(&P)\tCtrl+V"
MenuEnumText "削除(&L)\tDel"
MenuEnumLine
MenuEnumGray "検索(&F)...\tCtrl+F"
MenuEnumGray "次を検索(&N)\tF3"
MenuEnumText "置換(&R)...\tCtrl+H"
MenuEnumText "次へ移動(&G)...\tCtrl+G"
MenuEnumLine
MenuEnumText "すべて選択(&A)\tCtrl+A"
MenuEnumText "日付と時刻(&D)\tF5"
MenuEnumEnd
;書式(O)
MenuEnumBegin hSub(3),3001
MenuEnumText "右端で折り返す(&W)"
MenuEnumText "フォント(&F)..."
MenuEnumEnd
;表示(V)
MenuEnumBegin hSub(4),4001
MenuEnumText "ステータス バー(&S)"
MenuEnumEnd
;ヘルプ(H)
MenuEnumBegin hSub(5),5001
MenuEnumText "ヘルプの表示(&H)"
MenuEnumLine
MenuEnumText "バージョン情報(&A)"
MenuEnumEnd
;メニューバーの作成
MenuBarBegin hMenuBar
MenuBarItem "ファイル(&F)" ,hSub(1)
MenuBarItem "編集(&E)" ,hSub(2)
MenuBarItem "書式(&O)" ,hSub(3)
MenuBarItem "表示(&V)" ,hSub(4)
MenuBarItem "ヘルプ(&H)" ,hSub(5)
MenuBarEnd
return
//--------------------------------------
// メニューバーの選択
//--------------------------------------
*OnCommand
;ファイル(F)
if(wParam==1001):dialog "新規"
if(wParam==1002):
if(wParam==1003):
if(wParam==1004):
if(wParam==1005):
if(wParam==1006):
if(wParam==1007):end
;編集(E)
if(wParam==2001):sendmsg objinfo_hwnd(0),WM_UNDO
if(wParam==2002):sendmsg objinfo_hwnd(0),WM_CUT
if(wParam==2003):sendmsg objinfo_hwnd(0),WM_COPY
if(wParam==2004):sendmsg objinfo_hwnd(0),WM_PASTE
if(wParam==2005):sendmsg objinfo_hwnd(0),WM_CLEAR
if(wParam==2006):
if(wParam==2007):
if(wParam==2008):
if(wParam==2009):
if(wParam==2010):
if(wParam==2011):
;書式(O)
if(wParam==3001):
if(wParam==3002):
;表示(V)
if(wParam==4001):
;ヘルプ(H)
if(wParam==5001):dialog "ヘルプの表示"
if(wParam==5002):dialog "バージョン情報"
return 0
//--------------------------------------
// ドラッグ&ドロップの処理
//--------------------------------------
*OnDropFiles
sdim sFile,MAX_PATH
SetForegroundWindow hWnd
DragQueryFile wParam,0,varptr(sFile),MAX_PATH
DragFinish wParam
;読み込み
notesel sBuff
noteload sFile
noteunsel
objprm 0,sBuff
return 0
//--------------------------------------
// メッセージボックスのサイズ変更
//--------------------------------------
*OnSizing
SetWindowPos objinfo_hwnd(0),NULL,0,0,ginfo_winX,ginfo_winY,SWP_NOMOVE|SWP_NOZORDER
return 0
//------------------------------------------------------------------------------
// End of sample327(メニューバーのサンプル).hsp
//------------------------------------------------------------------------------
↑
ファイルをウインドウにドロップするとテキスト内容をメッセージボックスに入力します。
あとウインドウのサイズ変更をすると
メッセージボックスのサイズも自動的に変更します。

| |
|