メニューバーにボタンを配置する

Wndowsのアプリにはツールバーがあることが多いですが、自作のアプリにも同じようなものを付けてみたいと思うのが人情です
またソフトにツールバーが付いていると作者のスキルが高そうに見えます(実際はそうとは限らないんですが)
というわけで、メニューバーにボタンを付ける方法を調べました。なおこの方法は試行錯誤の結果なので無保証です



【1】Form_Load()でメニュー設定時にボタンも設定する
Windowsではメニューとツールバーは別に表示されますが、PocketPCでは同じバーに両方が表示されるようになっています
まず、通常のメニュー作成と同様にFormにメニューバーを配置します
Form_Load()に次のコードを追加します
Dim Button1 As MenuBarButton
Set Button1 = MenuBar1.Controls.AddButton("button1")
でボタンを配置できる。
"button1" とボタンに名前を付ける(Button1.Key = "button1" と同じ)、無くてもいいが後でボタンの処理をする時必要
ボタンのイメージは標準のもの(?)で良ければ何もせず1−15の番号で指定する。カット、ペースト、ファイル保存程度なら十分かも
自作する場合は16×16でbmpファイルを作成し、イメージリストコントロールに登録する
MenuBar1.ImageList = ImageList1.hImageList としてメニューバーに登録してから
Button1.Image = Number で指定する

Imageを指定してないと空白の四角が表示される
Button1.Style = value で通常ボタン、チェックボックス風ON/OFF、ボタングループなどのスタイルが指定できる
Button1.ToolTip = string でツールチップ(小さな窓で説明が表示される)を表示できる---PPCではタップでは表示されずホールドで表示される、ホールドでもボタンを押したことになるので今ひとつ使い道が無さそう
(MenuBarButton Object参照)

(例1)自作Imageを使わない
「File」メニューの次に「切り取り」「コピー」「貼り付け」のアイコンを表示する
イメージリストの準備が要らないので簡単。でもヘルプに載っていないので本当はしたらいけないのかも。
1−15で表示されるアイコンはこれ

Private Sub Form_Load()

'メニュー初期化
Dim mnuFile As MenuBarLib.MenuBarMenu

Set mnuFile = MenuBar1.Controls.AddMenu("File", "mnuFile")
mnuFile.Items.Add 1, "mnuFileForm1", "めにゅー1"
mnuFile.Items.Add 2, "mnuFileForm2", "めにゅー2"
mnuFile.Items.Add 3, , , mbrMenuSeparator
mnuFile.Items.Add 4, "mnuFileQuit", "終了"

'ボタン初期化
Dim Butt1 As MenuBarButton
Set Butt1 = MenuBar1.Controls.AddButton("button1")
Butt1.Image = 1
Dim Butt2 As MenuBarButton
Set Butt2 = MenuBar1.Controls.AddButton("button2")
Butt2.Image = 2
Dim Butt3 As MenuBarButton
Set Butt3 = MenuBar1.Controls.AddButton("button3")
Butt3.Image = 3

End Sub


(例2)自作Imageを使う
「File」メニューの次に6個の自作ビットマップを表示する
前処置
bitmap1.bmpは16×96ドットのビットマップファイルでプログラムと同じフォルダーに置く、作成には同時にインスツールされている eMbedded Visual C++ を使用。
1つのファイルに6個分のイメージが入っている。16×16ドットのビットマップを6個作って順に1個づつ登録していく方法もあります。
準備したビットマップ

プログラム作成時は右上のプロジェクトウィンドウのProjectを右クリックしメニューから「追加」ファイルの追加」を選択、ダイアログボックスで「関連ドキュメントとして追加」をチェック、「ファイルの種類」は「すべてのファイル」にして追加するビットマップファイルを表示し選択する。
これでプロジェクトウィンドウにビットマップファイル名が追加される
こうしておけば自動的にエミュレータ―に送ってくれる
ビットマップファイルはプログラムに取り込まれるわけではないので、実機で実行する場合は実機にも転送する必要がある
イメージリストコントロールを使うのでイメージリストコントロールをFormに配置する。
標準ではツールボックスにアイコンがないので、メニューからプロジェクト→コントロール→Microsot CE ImageList Control 3.0 をチェック
現れたアイコンをクリックしてFormに配置する、このコントロールは実行時には表示されないのでどこに配置してもいい

Private Sub Form_Load()

'メニュー初期化
Dim mnuFile As MenuBarLib.MenuBarMenu

Set mnuFile = MenuBar1.Controls.AddMenu("File", "mnuFile")
mnuFile.Items.Add 1, "mnuFileForm1", "めにゅー1"
mnuFile.Items.Add 2, "mnuFileForm2", "めにゅー2"
mnuFile.Items.Add 3, , , mbrMenuSeparator
mnuFile.Items.Add 4, "mnuFileQuit", "終了"

'イメージリストの準備
ImageList1.ImageHeight = 16 'これはImageList1のプロパティーでも設定可能
ImageList1.ImageWidth = 16 '同上、ここで幅を指定しないと分割されない。なお8にすると幅が半分のボタンになる
ImageList1.Add (App.Path & "\bitmap1.bmp")

MenuBar1.ImageList = ImageList1.hImageList

'ボタン初期化
Dim Butt1 As MenuBarButton
Set Butt1 = MenuBar1.Controls.AddButton("button1")
Butt1.Image = 1
Dim Butt2 As MenuBarButton
Set Butt2 = MenuBar1.Controls.AddButton("button2")
Butt2.Image = 2
Dim Butt3 As MenuBarButton
Set Butt3 = MenuBar1.Controls.AddButton("button3")
Butt3.Image = 3

End Sub


【2】ボタンを押したときの処理をMenuBar1_ButtonClick(button)に作成
自動的には作成されないので自分で書く
buttonはボタンオブジェクトなので処理を分ける場合はbutton.Key か button.Index を使うと良さそう
(例)
Private Sub MenuBar1_ButtonClick(button)
  Select Case button.Key
    Case "button1"
        'Keyに"button1"を指定したボタンが押された処理
    Case "button2"
        'Keyに"button2"を指定したボタンが押された処理
    Case "button3"
        'Keyに"button3"を指定したボタンが押された処理
  End Select
End Sub

【3】ボタンのスタイルを変える
通常ボタン、トグルスイッチ風ON/OFF、ボタングループなどのスタイルが指定できます
ボタン4をトグルスイッチ風にするには、ボタンの初期化時に
Butt4.Style = mbrCheck
と指定します
ボタンを押されているかどうかを判断するには
Button4.Value で取得できますが、Button4 の宣言を 外でしておかないと「変数が見つからないエラー」が発生します
チェック状態が1、未チェック状態が0となります


【4】ボタンにツールチップを付ける
ツールチップとはボタンの上にカーソルを持ってきたときに表示される小さな四角で中に簡単な説明が書いてあるものです
Windowsのアプリではおなじみですが、ボタン初期化時に次のように指定するとできます
Butt1.ToolTip = "ツールチップ1"
ただしPocketPCにはカーソルというものが無いので今ひとつ使いにくいです、ボタンをしばらく押したままにすると表示されます


【5】サンプル製作時の画面

TextBox1のプロパティーでMultiLineはTrueにして下さい
イメージの幅はImageList1のプロパティーで設定しています

ボタンの1〜3は普通のボタン、4〜6はトグルスイッチ風にしてみました
ボタンを押すとTextBoxに押されたボタンの数字と4−6ボタンの状態を表示します

【6】全コード
テキストファイルです

【7】ソースファイル
ZIPファイルです

【8】実行時の画面です
ボタン4と6が押された状態で、ボタン3を押した直後です



VBTOPに戻る