ホームページ開発ツール>Xojo / Real Studio Trial and Error・標準のヘルプビューアを利用する・Cocoa編

 Xojo / Real Studio Trial and Error

標準のヘルプビューアを利用する・Cocoa編

目次
 はじめに

 標準のヘルプビューアを利用する話題の続きです。
 Cocoaビルドでは、一部Carbonビルドとは異なる方法で実装する必要があるので、纏めておきました。

 とは言え、変更箇所はアプリケーションのメニュー周りのみで、それ以外はCarbonビルドと同じです。(こちらのページの「アプリケーション側の実装」項目のみ、下記の項目と差し替えてご覧下さい。)

 なお、今回の検証には、Xojo 2014 Release 2を用いています。(Mac mini + OS X 10.9.4)


 基本方針

 Carbonビルドと異なり、Cocoaビルドではヘルプメニューの自動追加が行われません。
Cocoaの仕組み上の話なのか、単にReal Studio(Xojo)側が対応していないのかは確認できていません。
 ここで参考になるのはXcodeです。
 XcodeでCocoa Applicationを新規作成すると、ヘルプを呼び出す機能がデフォルトで実装済となっています。(ただし、Help Book自体は存在していないので、メニューを選択するとメッセージが表示されますが…)

 MainMenu.xibを見ると、当該メニュー項目には「showHelp:」メソッドが紐づけられています。
 なので、showHelp:メソッドを自分で呼び出す方法を試してみることにしました。

 参考サイト(1):NSApplication Class Reference


 アプリケーション側の実装

 アプリケーションがHelp Bookを利用するためには、以下の通り実装します。
  1. MainMenuBarに「ヘルプ」メニューを追加し、そこに「<アプリケーション名> ヘルプ」メニュー項目を追加する。
  2. Appクラスにメニューハンドラを追加し、メニュー項目名を上述の「<アプリケーション名> ヘルプ」メニューに対応したものにする。
  3. メニューハンドラの中身を以下の通り記述する。
    // 文字列を指定してクラスオブジェクトを取得する。最初に一回宣言しておけばよい。
    Declare Function NSClassFromString Lib "Cocoa" (aClassName As CFStringRef) As Ptr
    
    // NSApplicationオブジェクトを取得
    Dim sA As Ptr = NSClassFromString("NSApplication")
    // NSApplicationのセレクタであるsharedApplicationを宣言
    Declare Function SharedApplication Lib "Cocoa" Selector "sharedApplication" (receiver As Ptr) As Ptr
    // sharedApplicationセレクタの処理(引数にはメッセージの受け手であるsAを指定し、戻り値は同じくsAを指定。)
    sA = SharedApplication(sA)
    
    // NSApplicationのセレクタであるshowHelp:を宣言
    Declare Sub showHelp Lib "Cocoa" Selector "showHelp:" (receiver As Ptr, sender As Ptr)
    // showHelp:セレクタの処理(HelpViewerの起動)
    showHelp(sA, nil)
    
    Return True
    
    注)IDEからの実行では、Help Book自体とInfo.plist追加分が存在しないので、メニューを選択してもメッセージが表示される。
  4. 他にヘルプメニュー項目があれば、追加する。

 結果

 実行してみましたが、とりあえず、動作しているようです。
 不具合が発生しないか等、詳細はもう少し動かして、様子を見た方がいいかもしれません。


 お世話になったサイト

 貴重な情報をご提供頂いている皆様に、お礼申し上げます。(以下、順不同)

 参考サイト(1):NSApplication Class Reference


 更新履歴

 2014.09.06 新規作成


[Home]  [MacSoft]  [Donation]  [History]  [Privacy Policy]  [Affiliate Policy]