C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: richtextboxのrtfについて


(過去ログ 135 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■79782 / inTopicNo.1)  richtextboxのrtfについて
  
□投稿者/ みう (6回)-(2016/05/16(Mon) 02:24:08)

分類:[VB.NET/VB2005 以降] 

以前テキストボックスの特定文字の色付けの件でお世話になりました、みうです。

今回のその関連なのですが、さらなる高速化を求めて(前回のものは最初よりは劇的に高速になったものの、ソフトとしては致命的な速度であったため)ネットを探し回ったところ、

http://www.geocities.jp/hatanero/richtextnet2.html

というサイトを見つけました。
ここに書いてあることはまさに理想!しかもサンプル配布してる!

と、思ったのですが、私の環境がサイト様の環境と違うのか、正常に変換がされません。
また、サンプルでは半角の0やaなどの色付けができないとあるのですが、私がやりたいのがまさに半角英数字の色付けのため、非常に困っております。

Rtfのがどのようになっているのか調べたのですが、どのようにして半角英数字(の中から任意の種類1文字)の色を変更するのかがどうしてもわからなく、皆さんのお力をお借りしたい次第です。

目的のソフトの開発に、あとこの高速色付けだけ実装すれば終わりという所まで来ているので非常に悔しいです。


Rtfを直接変更して特定文字の色を高速で変更する(Rtf自体で使う半角英数字も可能)プログラムのコード、もしくはどのようにしたらいいのかを具体的に説明して頂けないでしょうか?

環境
VB.NET framework
Visual Stdio 2013
引用返信 編集キー/
■79787 / inTopicNo.2)  Re[1]: richtextboxのrtfについて
□投稿者/ 魔界の仮面弁士 (704回)-(2016/05/16(Mon) 11:17:43)
No79782 (みう さん) に返信
> しかもサンプル配布してる!

RTF プロパティを直接加工するのは、高速化の常套手段ですが、
これは先頭から単純に String.IndexOf で走査しているだけなので、
処理としては十分ではありません。
実際に使おうとすると、もっと手を加える必要があります。


たとえば、このままだと \ 等のエスケープを考慮していないため、
本文を壊すことがあります。

そもそもヘッダー部、ドキュメント部を分けて走査していないため、
たとえば「\red128」という文字列を着色しようとすると
「\cf1 」等に化けてしまうなどの問題が生じます。


それに「\'16進数」表記には対応していますが、ChrW(&H9DD7) などの
「\u10進数」に対応しておらず、Shift_JIS に限定されてしまいますね。

あとは、コメントにある "Sift-Jis" という表現が不自然だとか
オーバーロードで実装せずに Object 引数を使っているとか
文字列連結で & 演算子と + 演算子が混在しているとか、
OpenFileDialog のところの種別判定処理が間違っているなど、
VB コードとしての突っ込みどころもありますが…あくまでも
サンプルとしての提供なので、多くを求めるのは酷というものでしょう。


> Rtfのがどのようになっているのか調べたのですが

基本的には RTF バージョン 1.6 に従います。
https://msdn.microsoft.com/en-us/library/aa140277.aspx


やりたい事がキーワードの着色だけで、フォント情報などの加工は不要ならば、
既存の RTF を加工するよりは、プレーンな Text を持ってきて、
それを自前で Unicode RTF に組み上げた方が手っ取り早そうです。
引用返信 編集キー/
■79799 / inTopicNo.3)  Re[2]: richtextboxのrtfについて
□投稿者/ みう (7回)-(2016/05/16(Mon) 23:33:16)
魔界の仮面弁士 様、コメントありがとうございます。

> やりたい事がキーワードの着色だけで、フォント情報などの加工は不要ならば、
> 既存の RTF を加工するよりは、プレーンな Text を持ってきて、
> それを自前で Unicode RTF に組み上げた方が手っ取り早そうです。

当方VB初心者なのですが、その方法についての解説サイト等がもしあれば教えて頂けないでしょうか?
引用返信 編集キー/
■79801 / inTopicNo.4)  Re[3]: richtextboxのrtfについて
□投稿者/ shu (865回)-(2016/05/17(Tue) 08:08:23)
No79799 (みう さん) に返信

> 当方VB初心者なのですが、その方法についての解説サイト等がもしあれば教えて頂けないでしょうか?
VB初心者なのは置いておいてrtfについて初心者なのなら今回の方法は難しいと思いますので
Selectionを使った方法を普通に行われた方がよいかと思います。
引用返信 編集キー/
■79802 / inTopicNo.5)  Re[4]: richtextboxのrtfについて
□投稿者/ みう (8回)-(2016/05/17(Tue) 08:33:40)
shu 様、コメントありがとうございます。

>>当方VB初心者なのですが、その方法についての解説サイト等がもしあれば教えて頂けないでしょうか?
> VB初心者なのは置いておいてrtfについて初心者なのなら今回の方法は難しいと思いますので
> Selectionを使った方法を普通に行われた方がよいかと思います。

確かに仰る通りなのですが、テキストエディタという事もあって速度があまりにも重い選択法は回避したいのです。
引用返信 編集キー/
■79803 / inTopicNo.6)  Re[5]: richtextboxのrtfについて
□投稿者/ shu (866回)-(2016/05/17(Tue) 08:38:28)
No79802 (みう さん) に返信

> 確かに仰る通りなのですが、テキストエディタという事もあって速度があまりにも重い選択法は回避したいのです。
ある程度速度重視したテキストエディタを作る人が初心者とか言わない方がよいということです。

魔界の仮面弁士さんの提示してくれたリンク先よりrtf書式を理解してrtfを作るようにしてみてはどうでしょう?
引用返信 編集キー/
■79804 / inTopicNo.7)  Re[5]: richtextboxのrtfについて
□投稿者/ 魔界の仮面弁士 (708回)-(2016/05/17(Tue) 10:22:51)
No79802 (みう さん) に返信
>>>当方VB初心者なのですが、その方法についての解説サイト等がもしあれば教えて頂けないでしょうか?

Windows 標準の「ワードパッド」で、空の RTF や、短文の RTF を作ってみてください。
そのうえで、それを「メモ帳」で開き、出てきた RTF コードのそれぞれを
先に紹介した URL の内容と比較してみてください。

英語ではありますが、きちんとまとまった資料になっていますので、
Visual Basic に対しての初心者であったとしても、
それぞれの RTF コードの内容を読み解くことはできると思います。

(プログラミングするためには、自分が作ろうとしているものについて
 きちんと理解していなければなりませんよね)


> 確かに仰る通りなのですが、テキストエディタという事もあって速度があまりにも重い選択法は回避したいのです。

(案1)HTML の contentEditable を利用する。
 → 着色は比較的早いが、コードから制御しにくいです。
  管理も大変なので、個人的には非推奨。

(案2)RichTextBox を利用する。
 → 標準コントロールなので制御は比較的楽ですが、ご存知のように
  着色のために、いちいち Selction するため、処理としては低速。
  加工用に非表示の RichTextBox を併用することで、多少の改善はできますが、
  さらなる高速化のためには、RTF コードを自分で制御することになるので、
  それなりの知識は要求されます。

(案3)自前でレンダリングする
 → 高速化を求めるなら究極的にはこれ。難易度はもっとも高いですが、
  きちんと作りこもうとするのであれば、ほぼこれ一択だと思います。

(案4)既存のテキスト入力コンポーネントを利用する。
 → 初心者向けならこれです。参照設定で使えるもの・API呼び出しとなるもの、
  有償なもの・無償なものなどまちまちなので、自分に合ったものを探しましょう。
http://www.r-nakai.com/archives/257
http://sgry.jp/pgarticles/cs_editor_component.html
引用返信 編集キー/
■79806 / inTopicNo.8)  Re[6]: richtextboxのrtfについて
□投稿者/ みう (9回)-(2016/05/17(Tue) 12:53:18)
No79803 (shu さん) に返信

> ある程度速度重視したテキストエディタを作る人が初心者とか言わない方がよいということです。

テキストエディタを作りたく、C++よりもVB.NETの方が楽だと聞いてVB.NETを始めました。
なので初心者と言わせてもらったのですが、不適切な表現でした、申し訳ありません。

> 魔界の仮面弁士さんの提示してくれたリンク先よりrtf書式を理解してrtfを作るようにしてみてはどうでしょう?

頑張ってみます
引用返信 編集キー/
■79807 / inTopicNo.9)  Re[6]: richtextboxのrtfについて
□投稿者/ みう (10回)-(2016/05/17(Tue) 12:56:50)
No79804 (魔界の仮面弁士 さん) に返信
> Windows 標準の「ワードパッド」で、空の RTF や、短文の RTF を作ってみてください。
> そのうえで、それを「メモ帳」で開き、出てきた RTF コードのそれぞれを
> 先に紹介した URL の内容と比較してみてください。

> 英語ではありますが、きちんとまとまった資料になっていますので、
> Visual Basic に対しての初心者であったとしても、
> それぞれの RTF コードの内容を読み解くことはできると思います。

丁寧な説明ありがとうございます。翻訳しながらやっていこうと思います。

> (プログラミングするためには、自分が作ろうとしているものについて
>  きちんと理解していなければなりませんよね)

仰る通りです。

> (案1)HTML の contentEditable を利用する。
>  → 着色は比較的早いが、コードから制御しにくいです。
>   管理も大変なので、個人的には非推奨。
>
> (案2)RichTextBox を利用する。
>  → 標準コントロールなので制御は比較的楽ですが、ご存知のように
>   着色のために、いちいち Selction するため、処理としては低速。
>   加工用に非表示の RichTextBox を併用することで、多少の改善はできますが、
>   さらなる高速化のためには、RTF コードを自分で制御することになるので、
>   それなりの知識は要求されます。
>
> (案3)自前でレンダリングする
>  → 高速化を求めるなら究極的にはこれ。難易度はもっとも高いですが、
>   きちんと作りこもうとするのであれば、ほぼこれ一択だと思います。
>
> (案4)既存のテキスト入力コンポーネントを利用する。
>  → 初心者向けならこれです。参照設定で使えるもの・API呼び出しとなるもの、
>   有償なもの・無償なものなどまちまちなので、自分に合ったものを探しましょう。
> http://www.r-nakai.com/archives/257
> http://sgry.jp/pgarticles/cs_editor_component.html

本当にありがとうございます!
教えていただいた方法・サイトを参考にやってみます!
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -