涼の成長記録

自らの人生に主導権を持つべく、独立を目指して2014年3月31日を持ってITエンジニアを退職。そんな23歳♂の成長記録。

C++Builderでアプリケーションから取扱説明書を表示する

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


余談ですが、最近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));
    }
}


ガシガシコード書いてブログにサンプルを載せ続ける毎日だと素敵ですね。まあ、こんなお粗末なコードが人のお役に立てるかは別として。。
ではでは。