<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>INIファイル | じじぃの引出し</title>
	<atom:link href="https://www.kazuban.com/blog/tag/init-file/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kazuban.com/blog</link>
	<description>なにかしら、皆さんの参考になれば幸いです！</description>
	<lastBuildDate>Tue, 24 Dec 2024 08:50:53 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.kazuban.com/blog/wp-content/uploads/2020/05/cropped-ICON-1-32x32.png</url>
	<title>INIファイル | じじぃの引出し</title>
	<link>https://www.kazuban.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ソフトの終了状態を記録。C++BuilderでINIファイルを利用する。</title>
		<link>https://www.kazuban.com/blog/init-file/</link>
					<comments>https://www.kazuban.com/blog/init-file/#comments</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Wed, 18 Nov 2020 09:04:50 +0000</pubDate>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[INIファイル]]></category>
		<category><![CDATA[フォント変更]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=3758</guid>

					<description><![CDATA[前回公開した、ＮＣデータ確認ソフトはエディタ部分のフォントを変更できる仕様としました。でも、再起動時には初期状態へ戻ってしまうため、フォントの設定状態を、次回起動時にも反映できないかな～との要望を「ZENKYUさん」より [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://www.kazuban.com/blog/nc-check-to-dxf/">前回公開した、ＮＣデータ確認ソフト</a>はエディタ部分のフォントを変更できる仕様としました。<br>でも、再起動時には初期状態へ戻ってしまうため、フォントの設定状態を、次回起動時にも反映できないかな～との要望を「ZENKYUさん」よりいただいたので、やってみました。<br>前回起動時の状態の保存・取出しに、初期化ファイル（INIファイル）を使用し、フォントの設定に、「Font」プロパティを使用したので、覚書として残して置こうと思います。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">エディタ部分のフォントを変更する</a></li><li><a href="#toc2" tabindex="0">ＩＮＩファイルの作成</a><ol><li><a href="#toc3" tabindex="0">ＩＮＩファイル名</a></li><li><a href="#toc4" tabindex="0">自分の実行プログラムの場所を知る</a></li><li><a href="#toc5" tabindex="0">INIファイル名を取得する</a></li><li><a href="#toc6" tabindex="0">INIファイルの読み・書き</a></li></ol></li><li><a href="#toc7" tabindex="0">INIファイルを反映</a><ol><li><a href="#toc8" tabindex="0">アプリのwindow位置設定</a></li><li><a href="#toc9" tabindex="0">フォントの設定</a></li></ol></li><li><a href="#toc10" tabindex="0">状態を保存して終了</a><ol><li><a href="#toc11" tabindex="0">INIファイルへ書き出し</a></li></ol></li><li><a href="#toc12" tabindex="0">前回公開のNcCheck2Dxf.exe にVer3.41として入れ替えました。</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">エディタ部分のフォントを変更する</span></h2>



<p>C++Builder でフォントを変更するには、「FontDialog」コンポーネントを使用すれば、簡単に実現できます。<br>例としては、Form に、FontDialogコンポーネントとTMemoやTRichEditを配置して、Fontプロパティに「FontDialog」からのFontを代入するだけです。</p>



<pre class="wp-block-preformatted">if(FontDialog1-&gt;Execute()){
  Memo1-&gt;Font = FontDialog1-&gt;Font;
}</pre>



<p>単純にフォントだけを変更する場合はこれでいいのですが、<br>私は「TRichEdit」で、カーソル位置の色を変更したりしているのが原因か？<br>そのカーソル行だけ、うまく変更してくれません。<br>たぶん、「RichEdit1-&gt;SelAttributes」などで、きちんと処理すればよさそうな気もしますがよくわからなかったので、一度エディタ部の内容を一時ファイルへ保存して、フォントを変更後、再度その一時ファイルから、エディタ部へ読み込むような邪道な処理をしています。</p>



<pre class="wp-block-preformatted">UnicodeString temp = "TempFileForFont.txt";
RichEdit1-&gt;Lines-&gt;SaveToFile(temp);
RichEdit1-&gt;Font = FontDialog1-&gt;Font;
RichEdit1-&gt;Lines-&gt;Clear();
RichEdit1-&gt;Lines-&gt;LoadFromFile(temp);
DeleteFile(temp);</pre>



<p>なので、一時的に、実行ファイルと同じ場所に一時ファイルが作成されます。<br>また、再度ファイルの読み書き処理をするので、処理時間を懸念しましたが、私の環境ではそれほど気にならなかったので、こんな処理としました。</p>



<h2 class="wp-block-heading"><span id="toc2">ＩＮＩファイルの作成</span></h2>



<p>起動時に前回の状態を再現するには、その状態を記憶しておく必要があります。<br>市販のアプリケーションでは、システムレジストリへ記録しておく場合がよくありますが、このような小さなツールでレジストリを汚したくないので、ＩＮＩファイル仕様で行こうと思います。</p>



<h3 class="wp-block-heading"><span id="toc3">ＩＮＩファイル名</span></h3>



<p>INIファイルのファイル名は何がいいでしょう？<br>通常は実行プログラム名の拡張子を「INI」に変換した名前が一般的だと思います。</p>



<h3 class="wp-block-heading"><span id="toc4">自分の実行プログラムの場所を知る</span></h3>



<p>プログラムを実行する場合、そのEXEファイルをクリックして実行する場合や、必要なファイルをドロップしたり、コマンドラインからパラメータを追加して実行する場合などがあります。<br>その場合、パラメータは「ParamStr(int)」で取得できますが<br>自分自身の実行プログラムのパスは「ParamStr(0)」で知ることができます。<br>また「Application-&gt;ExeName」プロパティでも取得できます。</p>



<pre class="wp-block-preformatted">UnicodeString MyPath1 = ParamStr(0);
UnicodeString MyPath2 = Application-&gt;ExeName;</pre>



<p>さらに、ファイルパスから、上層のディレクトリ名を知りたい場合には、<br>「ExtractFileDir(UnicodeString)」関数が使えます。</p>



<pre class="wp-block-preformatted">UnicodeString MyDir = ExtractFileDir(MyPath1);</pre>



<h3 class="wp-block-heading"><span id="toc5">INIファイル名を取得する</span></h3>



<p>INIファイル名は、自分自身の実行ファイルパス名から、拡張子のみを変更した名前にする事にします。<br>結構面倒だな～と思っていたら、便利な関数がありました。<br><a rel="noopener" href="http://docwiki.embarcadero.com/Libraries/Sydney/ja/System.SysUtils.ChangeFileExt" target="_blank">「ChangeFileExt(UnicodeString FileName, UnicodeString Extension)」</a>です。<br>最初の引数に「ファイル名」、次に「拡張子」を与えます。<br>ここで注意！指示する「拡張子」には、「.」が必要です。</p>



<pre class="wp-block-preformatted">UnicodeString IniFilePath = ChangeFileExt(MyPath1,".INI");</pre>



<h3 class="wp-block-heading"><span id="toc6">INIファイルの読み・書き</span></h3>



<p>最初は、WindowsSDK の「GetPrivateProfileString」と「WritePrivateProfileString」を利用してプログラムしていましたが<br>な～んだ、<a rel="noopener" href="http://docwiki.embarcadero.com/RADStudio/Sydney/ja/TIniFile_%E3%81%8A%E3%82%88%E3%81%B3_TMemIniFile_%E3%81%AE%E4%BD%BF%E7%94%A8" target="_blank">C++Builder にも「TIniFile」クラスが用意されていました</a>。<br>INIファイルは、基本的には「セクション名」「識別キー」「値」の３要素で構成されます。<br>作成するソフトでは、起動時のWindowの「場所」「幅」「フォント属性」が記録されるようにします。</p>



<p id="ex">・</p>



<pre class="wp-block-preformatted">[WINDOW]
Top=120
Left=80
Width=1174
Height=752
[FONT]
Name=Tahoma
Size=10
Bold=0
Italic=0
UnderLine=0
StrikeOut=0</pre>



<h2 class="wp-block-heading"><span id="toc7">INIファイルを反映</span></h2>



<p>C++では、起動時にはまずコンストラクタが呼ばれますから、コンストラクタで読み込んで反映させます。</p>



<h3 class="wp-block-heading"><span id="toc8">アプリのwindow位置設定</span></h3>



<p>アプリの表示位置は、Formの「Top」「Left」「Width」「Height」で設定できます。<br><a rel="noopener" href="http://docwiki.embarcadero.com/RADStudio/Sydney/ja/TIniFile_%E3%81%8A%E3%82%88%E3%81%B3_TMemIniFile_%E3%81%AE%E4%BD%BF%E7%94%A8" target="_blank">説明サイトを参考に</a>「ReadInteger」で識別キーの整数値が取得できます。<br><a href="#ex">上の例では</a>、</p>



<pre class="wp-block-preformatted">Top = ini-&gt;ReadInteger("WINDOW","Top",100);
Left = ini-&gt;ReadInteger("WINDOW","Left",100);</pre>



<p>でアプリウィンドウの左上が決定できます。<br>幅、高さも同様です。</p>



<h3 class="wp-block-heading"><span id="toc9">フォントの設定</span></h3>



<p>フォントサイズやフォント名は、同様に「ReadInteger」「ReadString」で取得できます。<br>ちょっと変数形式が違うのが、「スタイル」や「文字飾り」です。<br>このプロパティには<a rel="noopener" href="https://edn.embarcadero.com/jp/article/39974" target="_blank">「集合型」が使われている</a>ようです。<br>「集合型」は、「&lt;&lt;」と「&gt;&gt;」演算子を使って、追加、削除します。<br>フォントのスタイルには、「太字」「斜体」「取り消し線」「下線」がありますが、それぞれ「fsBold」「fsItalic」「fsStrikeOut」「fsUnderline」で設定します。</p>



<pre class="wp-block-preformatted">FontDialog1-&gt;Font-&gt;Style = FontDialog1-&gt;Font-&gt;Style &lt;&lt; fsBold;
FontDialog1-&gt;Font-&gt;Style = FontDialog1-&gt;Font-&gt;Style &lt;&lt; fsItalic;
FontDialog1-&gt;Font-&gt;Style = FontDialog1-&gt;Font-&gt;Style &gt;&gt; fsStrikeOut;</pre>



<h2 class="wp-block-heading"><span id="toc10">状態を保存して終了</span></h2>



<p>C++Builder では、フォームが閉じられる時に「FormDestroy」イベントが発生しますから、この場所に、INIファイルへの書き込み処理を定義します。</p>



<h3 class="wp-block-heading"><span id="toc11">INIファイルへ書き出し</span></h3>



<p>書き出しも、読込みと同様に、<a href="http://docwiki.embarcadero.com/RADStudio/Sydney/ja/TIniFile_%E3%81%8A%E3%82%88%E3%81%B3_TMemIniFile_%E3%81%AE%E4%BD%BF%E7%94%A8">「TIniFile」クラスを利用</a>します。</p>



<pre class="wp-block-preformatted">ini-&gt;WriteInteger("WINDOW","Top",Top);
ini-&gt;WritwInteger("WINDOW","Left",Left);</pre>



<h2 class="wp-block-heading"><span id="toc12">前回公開のNcCheck2Dxf.exe にVer3.41として入れ替えました。</span></h2>



<p>上述のC++Builderの機能を使用して、前回終了時の状態を再現できるような処理を加えてみました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><a href="https://www.kazuban.com/blog/nc-check-to-dxf/#DownLoad">こちらから、ダウンロードできます。</a></p></blockquote>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/init-file/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
	</channel>
</rss>
