Ryukalice

C++Builder から PDF ファイルを開く

2013-11-26

直感的なグラフィカルユーザーインターフェースを提供できれば、それに越したことはないのですが、機能の多いアプリケーションでは難しいものです。そこで、ユーザーにオペレーションマニュアルを納めたりするのですが、これをアプリケーションが入っているマシンから直接見れたら、便利なんじゃないの?というお話です。

余談ですが、最近3DSソフトの取扱説明書も紙1枚になって、「詳細はソフト内のマニュアル読んでくれ」というスタンスを取っていますよね。今の子供たちは、ゲームを買った帰りに、車の中でワクワクしながら取説読んだりすることは、なくなってしまうのでしょうかね。少しだけ寂しいですね。

で、それはそうと、手元に実物がなくても操作方法が分かるというのは、なかなか良いことだと思うので、実装してみようと思います。PDF だったりすると、納めるマシンに PDF リーダーを入れたり等、結構面倒だったりします。Windows ヘルプ形式とかでマニュアルを作れれば、それが一番良いのですが、当方そんな技術は持ち合わせておりません。

C++Builder で実装する時は、こんな感じです。メニューバーの[ヘルプ(H) → マニュアル(M)]操作等で表示する想定です。

//------------------------------------------------------------------------------
// [ヘルプ(H) → マニュアル(M)]のonClickイベント
//------------------------------------------------------------------------------
void __fastcall TForm_Main::Menu_Help_ManualClick(TObject *Sender) {
    // ファイルパスの組み立て
    UnicodeString filePath = (ExtractFilePath(Application->ExeName) + L"Manual\\マニュアル.pdf");

    // ファイルの実行
    HINSTANCE executeResult = ShellExecute(Form_Main->Handle, L"open", filePath.c_str(), NULL, NULL, SW_SHOW);

    // ShellExecute関数は、失敗すると32以下の値が返る。
    if ((int)executeResult <= 32) {
        MessageBox(
            Form_Main->Handle,
            L"マニュアルは表示できません。\n紙媒体のマニュアルをご利用ください。",
            L"エラー",
            (MB_OK | MB_ICONERROR));
    }
}