DOBON.NETプログラミング道掲示板

ツリー一括表示

Nomalアイコン リッチテキストボックスでの字間の調整 /kohei (19/05/26(Sun) 07:57) #34261
Nomalアイコン Re[1]: リッチテキストボックスでの字間の調整 /魔界の仮面弁士 (19/05/26(Sun) 16:49) #34263
  └Nomalアイコン 解決しました! /kohei (19/05/26(Sun) 17:37) #34264 解決み!


親記事 / ▼[ 34263 ]
■34261 / 親階層)  リッチテキストボックスでの字間の調整
□投稿者/ kohei 一般人(1回)-(2019/05/26(Sun) 07:57:03)
  • アイコン環境/言語:[VB.NET] 
    分類:[.NET] 

    VisualStudio2019のVBで、リッチテキストボックスを使ったプログラムを作ってるのですが、
    字間の調整ができずに困っています…。

    単純なテキストファイルを読み込んで、文字列操作で書式制御を加えてRTFを作って、色付け等を行ってます。
    RTFの解説から「\expndtw」を見つけてこれで行けると思ったのですが、変わりません…。
    生成したRTFを書き出してメモ帳(Windowアプリ)に貼り付けてワードパッドで開くと、ちゃんと字間があくので、
    RTFとしては間違えてないと思うのですが、VBで作ったプログラムの方では字間が変わりません。

    VBのリッチテキストボックスは、RTFの全ての書式が使えるわけではなく、
    何か制限(機能の限定)があるのでしょうか?

    ちょっと長いけど、その時のRTF文字列付けておきます。

    {\rtf1\ansi\ansicpg932\deff0\deflang1033\deflangfe1041{\fonttbl{\f0\fnil\fcharset128 @\'82\'6c\'82\'72 \'83\'53\'83\'56\'83\'62\'83\'4e;}}
    {\colortbl ;\red255\green255\blue221;\red221\green255\blue221;\red192\green221\blue255;\red255\green221\blue221;\red192\green192\blue192;}
    {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa20\sl0\slmult0\fs24\highlight1 :\highlight2 10\highlight3 0000\highlight4 0\expndtw120 0\expndtw0\highlight0 0\expndtw120 9\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 E\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 D\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 C\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 B\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 A\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 9\expndtw0 C\expndtw120 0\expndtw0 0\expndtw120 8\expndtw0 C\expndtw120 0\expndtw0 \expndtw0\highlight5 9A\highlight0\par
    \highlight1 :\highlight2 02\highlight3 0000\highlight4 0\expndtw120 0\expndtw0\highlight0 7\expndtw120 A\expndtw0 F\expndtw120 E\expndtw0 \expndtw0\highlight5 86\highlight0\par

    (ワードパッドのスクショつけようとしたけど、サイズで拒否されました…。上記を張り付けして見たらバレバレと思いますが、IntelHexフォーマットを色付きで表示したいプログラムです。)
違反を報告
[ □ Tree ] 返信 削除キー/

▲[ 34261 ] / ▼[ 34264 ]
■34263 / 1階層)  Re[1]: リッチテキストボックスでの字間の調整
□投稿者/ 魔界の仮面弁士 大御所(1229回)-(2019/05/26(Sun) 16:49:13)
  • アイコン
    No34261に返信(koheiさんの記事)
    > ちょっと長いけど、その時のRTF文字列付けておきます。
    『{』の個数が、『}』の個数より多いような…?
    
    
    > VisualStudio2019のVBで、リッチテキストボックスを使ったプログラムを作ってるのですが、
    ターゲットとしている .NET Framework バージョンと
    実行環境の OS バージョンは何でしょうか?
    
    
    > VBのリッチテキストボックスは、RTFの全ての書式が使えるわけではなく、
    > 何か制限(機能の限定)があるのでしょうか?
    
    RTF 仕様について学ばれているようなので、既にご存知とは思いますが、
    RTF には幾つかのバージョンがあり、バージョン間で機能面に差異があります。
    https://ja.wikipedia.org/wiki/Rich_Text_Format#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE%E5%B1%A5%E6%AD%B4
    
    また、それを扱う Rich Edit Control にも複数のバージョンがあります。
    https://blogs.msdn.microsoft.com/murrays/2006/10/13/richedit-versions/
    
    どのバージョンの DLL が利用されるのかは、使用している
    .NET Framework バージョンによって異なっていますが、元々は
    いわゆる RichEd20.DLL がロード対象であったと記憶しています。
    リリース当初は RichEdit 3.0 相当(ただし Win98 では 2.0 相当)かと。
    
    しかし実際に動作させてみると、たとえば .NET Framework の
    3.5 と 4.7.2 とでは、RTF の解釈に差が生じることがあります。
    
    これは 4.6 において、RichEd20.DLL よりも MsftEdit.DLL を
    優先利用するための機能が用意されたためです。しかし互換性上の理由から
    既定では RichEd20.DLL が引き続き利用されるようになっていました。
    
    ただし 4.7 では、MsftEdit.DLL が優先利用されるよう変更されました。
    
    4.6 以降では、この DLL バージョンのためのオプトアウトスイッチとして
    DoNotLoadLatestRichEditControl が設けられました。
    動作を切り替えるためには、app.config 上に下記の項目を追加できます。
    
    
    <configuration>
      <runtime>
        <!--
        <AppContextSwitchOverrides value="Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl=false"/>
        <AppContextSwitchOverrides value="Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl=true"/>
        -->
      </runtime>
    </configuration>
    
    ※上記は WinForms の場合の話です。WPF その他については未調査です。

違反を報告
[ 親 34261 / □ Tree ] 返信 削除キー/

▲[ 34263 ] / 返信無し
■34264 / 2階層)  解決しました!
□投稿者/ kohei 一般人(2回)-(2019/05/26(Sun) 17:37:41)
  • アイコン2019/06/02(Sun) 17:32:13 編集(投稿者)
    2019/05/26(Sun) 22:32:05 編集(投稿者)
    2019/05/26(Sun) 22:31:53 編集(投稿者)

    > ターゲットとしている .NET Framework バージョンと
    > 実行環境の OS バージョンは何でしょうか?

    .NET Frameworkは「2.0」にしてました。
    これを、プロジェクトのプロパティから、選択肢の中の最新の「4.7.2」に変更したら、
    ちゃんと字間があくようになりました!
    (ちなみに、OSはWindows10です。まず3.5にしてみてダメ、4.6でもダメ、4.7.2に変更でOKになりました。)

    ほぼ初めてVisualBasicでプログラムを作ってみてるのですが、
    プロジェクト作り始めて「.NET Frameworkはどれ使う?」と聞かれたときに、
    「ブログで公開したりした時に、バージョンが古い方が他の人が使いやすいのかな?」
    とか思って、なんかよく見る「2.0」にしてみたのでしたww。

    RTFについて学んでいるなんて状況には程遠く、ネットのあちこちから拾い集めて
    なんとかプログラムを作ってみています。
    あと二息ぐらいで完成すると思うので、完成したらブログにアップします。
    https://blog.goo.ne.jp/kohei-m/e/18fadcb17eeea12d1932dcfab4b01723

    ご回答、大変ありがとうございました!

    (追記)
    力作(?)、完成しました〜。
    https://blog.goo.ne.jp/kohei-m/e/7981a3392f041a855b9c426e332be395
    大変ありがとうございました。
解決み!
違反を報告
[ 親 34261 / □ Tree ] 返信 削除キー/


Mode/  Pass/


- Child Tree -