tag:crieit.net,2005:https://crieit.net/tags/chm/feed 「chm」の記事 - Crieit Crieitでタグ「chm」に投稿された最近の記事 2019-07-17T10:03:01+09:00 https://crieit.net/tags/chm/feed tag:crieit.net,2005:PublicArticle/15252 2019-07-17T10:03:01+09:00 2019-07-17T10:03:01+09:00 https://crieit.net/posts/WPF-chm 【WPF】chm ヘルプファイルを表示する <p>昨日に引き続きWPFのネタ。<br /> 以前、Wordからchmファイルを作るソフトの紹介をしましたが、それで作成したファイルをWPFで表示する方法を調べてみました。</p> <p>Windowsフォームであれば専用のクラスがあるのですが、WPF用のものは無いみたいなので、Windowsフォームのライブラリを利用して表示します。</p> <p>プログラムは前回のものを流用します。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/11/24/post-3194/" target="_blank" rel="noopener noreferrer" data-blogcard="1">【WPF】右クリックメニューでデータグリッドの内容をコピーする</a></p> <p>chmを作成するソフトについては次の記事を参考にしてください。<br /> <a target="_blank" rel="nofollow noopener" href="https://www.doraxdora.com/blog/2017/11/03/post-2997/" target="_blank" rel="noopener noreferrer" data-blogcard="1">Word から chm ファイルを生成する「doc2htmlhelp」</a></p> <h2 id="画面の修正"><a href="#%E7%94%BB%E9%9D%A2%E3%81%AE%E4%BF%AE%E6%AD%A3">画面の修正</a></h2> <h3 id="バインディングの追加"><a href="#%E3%83%90%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%AE%E8%BF%BD%E5%8A%A0">バインディングの追加</a></h3> <p>F1キーでヘルプファイルを開けるように画面にバインディングの記述を追加します。</p> <p>MainWindow.xaml</p> <pre><code> <Window.InputBindings> <KeyBinding Gesture="F1" Command="Help" /> </Window.InputBindings> <Window.CommandBindings> <CommandBinding Command="Help" Executed="CommandBinding_Executed"/> </Window.CommandBindings> </code></pre> <h3 id="メニューの追加"><a href="#%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%AE%E8%BF%BD%E5%8A%A0">メニューの追加</a></h3> <p>PDF表示とは別に、ヘルプ表示用のメニューを追加します。</p> <p>MainWindow.xaml</p> <pre><code> <Menu Style="{StaticResource menu-normal}" Background="#e7efff" Height="auto" Width="auto" Margin="0,0,0,20"> <MenuItem Header="ファイル(_F)" > <MenuItem x:Name="menu_exit" Header="終了(_X)" Click="menu_exit_Click"/> </MenuItem> <MenuItem Header="その他(_O)"> <MenuItem x:Name="menu_pdfview" Header="サンプルPDF表示(_P)" Click="menu_pdfview_Click"/> <MenuItem x:Name="menu_chmview" Header="ヘルプ表示(_H)" Click="menu_chmview_Click"/> </MenuItem> </Menu> </code></pre> <p> </p> <h2 id="ライブラリの追加"><a href="#%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E8%BF%BD%E5%8A%A0">ライブラリの追加</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/11/WpfChm000.jpg" alt="参照の追加" /></p> <p>ソリューション・エクスプローラーからプロジェクトの「参照」を右クリックし、「参照の追加」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/11/WpfChm001.jpg" alt="ライブラリの選択" /></p> <p>「System.Windows.Forms」を選択して、「OK」ボタンをクリックします。</p> <h2 id="chmファイルの追加"><a href="#chm%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%BF%BD%E5%8A%A0">chmファイルの追加</a></h2> <p>プロジェクト直下に作成した「chm」ファイルを追加します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/11/WpfChm002.jpg" alt="chmファイルの追加" /></p> <p>chmディレクトリに、作成したファイルをペーストします。</p> <h2 id="プログラムの修正"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E4%BF%AE%E6%AD%A3">プログラムの修正</a></h2> <p>アセンブリからアプリケーション実行ディレクトリを取得するためのライブラリをインポートします。</p> <p>MainWindow.xaml.cs</p> <pre><code>using System.Reflection; </code></pre> <h3 id="ヘルプ表示メソッドの追加"><a href="#%E3%83%98%E3%83%AB%E3%83%97%E8%A1%A8%E7%A4%BA%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AE%E8%BF%BD%E5%8A%A0">ヘルプ表示メソッドの追加</a></h3> <p>F1キー、メニューから呼び出すメソッドを追加します。</p> <p>MainWindow.xaml.cs</p> <pre><code> /// <summary> /// ヘルプファイルを表示します. /// </summary> private void ShowHelp() { Assembly mainAssembly = Assembly.GetExecutingAssembly(); String appDir = System.IO.Path.GetDirectoryName(mainAssembly.Location); System.Windows.Forms.Help.ShowHelp(null, "file://" + appDir + "/chm/開発環境構築手順書.chm"); } </code></pre> <p> </p> <h3 id="イベントメソッドの追加"><a href="#%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AE%E8%BF%BD%E5%8A%A0">イベントメソッドの追加</a></h3> <p>F1キー、ヘルプメニュークリック時のイベントメソッドを追加します。</p> <pre><code> /// <summary> /// F1キーでヘルプ表示 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) { logger.Info("F1押下"); ShowHelp(); } /// <summary> /// ヘルプ表示 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void menu_chmview_Click(object sender, RoutedEventArgs e) { logger.Info("ヘルプメニュークリック"); ShowHelp(); } </code></pre> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/11/WpfChm003.jpg" alt="ヘルプメニュー" /></p> <p>ヘルプメニューに追加した「ヘルプ表示」を選択します。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2017/11/WpfChm004.jpg" alt="chmファイルの表示" /></p> <p>無事にヘルプファイルの表示ができました。</p> <p>全然関係内容ですが。。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>アプリケーションのヘルプはPDFもいいですが、こういったヘルプファイルだとキーワード検索が簡単にできたり、<br /> 目次から目的のヘルプを探しやすいのでユーザーフレンドリーかもしれませんね。</p> <p>ではでは。</p> doraxdora