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

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

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

Re[9]: リッチテキストボックス内の半角文字を一括で全角文字にしたい


(過去ログ 66 を表示中)

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

■38271 / inTopicNo.1)  リッチテキストボックス内の半角文字を一括で全角文字にしたい
  
□投稿者/ ファイナラ (1回)-(2009/07/10(Fri) 10:29:01)

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

こんにちは。VB2008のリッチテキストボックスで、以下のようなことを行おうと考えています。

1.リッチテキストボックス内に入力したテキストの色を変更できるようにする。
2.リッチテキストボックス内に画像を挿入できるようにする。
3.リッチテキストボックスの内容をrtf形式で保存するとき、半角文字を全角文字に変換して保存する。

ここで、3.の半角→全角変換を一括でやりたいのですが、テキストの色設定はそのままにしてこれを行うにはどうすればよいでしょうか?
思いつく案としては、

1.リッチテキストボックスのTextLengthを取得し、0〜TextLength - 1のループを行う
2.ループ内で、リッチテキストボックスの文字を1文字ずつSelectionを行い、SelectedTextの内容をStrConv関数で全角文字に置き換える

ですが、これだと文字数が多くなると処理に時間がかかるような気がします。
何かスマートな方法はないでしょうか?
宜しくお願い申し上げます。
引用返信 編集キー/
■38273 / inTopicNo.2)  Re[1]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ aaaa (1回)-(2009/07/10(Fri) 11:33:48)
No38271 (ファイナラ さん) に返信
> こんにちは。VB2008のリッチテキストボックスで、以下のようなことを行おうと考えています。
>
> 1.リッチテキストボックス内に入力したテキストの色を変更できるようにする。
> 2.リッチテキストボックス内に画像を挿入できるようにする。
> 3.リッチテキストボックスの内容をrtf形式で保存するとき、半角文字を全角文字に変換して保存する。
>
> ここで、3.の半角→全角変換を一括でやりたいのですが、テキストの色設定はそのままにしてこれを行うにはどうすればよいでしょうか?
> 思いつく案としては、
>
> 1.リッチテキストボックスのTextLengthを取得し、0〜TextLength - 1のループを行う
> 2.ループ内で、リッチテキストボックスの文字を1文字ずつSelectionを行い、SelectedTextの内容をStrConv関数で全角文字に置き換える
>
> ですが、これだと文字数が多くなると処理に時間がかかるような気がします。
> 何かスマートな方法はないでしょうか?
> 宜しくお願い申し上げます。

dim Hankaku as String = StrConv(変換する文字列,VbStrConv.Narrow)

dim Zenkaku as String = StrConv(変換する文字列,VbStrConv.Wide)

だめですか?

引用返信 編集キー/
■38275 / inTopicNo.3)  Re[2]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ ファイナラ (2回)-(2009/07/10(Fri) 11:46:11)
No38273 (aaaa さん) に返信
aaaa さん、ご回答ありがとうございます。

> ■No38271 (ファイナラ さん) に返信
>
> dim Hankaku as String = StrConv(変換する文字列,VbStrConv.Narrow)
>
> dim Zenkaku as String = StrConv(変換する文字列,VbStrConv.Wide)
>
> だめですか?

ここで質問ですが、
1.上記式の「変換する文字列」には、リッチテキストボックスのどの文字列を入れるのでしょうか?
2.上記の「Hankaku」・「Zenkaku」変数の結果をどうするのでしょうか?

例えば、リッチテキストボックスのTextプロパティの内容をStrConvして戻してあげると、文字色の情報等が消えてしまいます。
なので、この方法のままでは解決になりません。
引用返信 編集キー/
■38277 / inTopicNo.4)  Re[3]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ らじうむ (16回)-(2009/07/10(Fri) 12:14:07)
No38275 (ファイナラ さん) に返信
> ■No38273 (aaaa さん) に返信
> aaaa さん、ご回答ありがとうございます。
>
>>■No38271 (ファイナラ さん) に返信
>>
>>dim Hankaku as String = StrConv(変換する文字列,VbStrConv.Narrow)
>>
>>dim Zenkaku as String = StrConv(変換する文字列,VbStrConv.Wide)
>>
>>だめですか?
>
> ここで質問ですが、
> 1.上記式の「変換する文字列」には、リッチテキストボックスのどの文字列を入れるのでしょうか?
> 2.上記の「Hankaku」・「Zenkaku」変数の結果をどうするのでしょうか?
>
> 例えば、リッチテキストボックスのTextプロパティの内容をStrConvして戻してあげると、文字色の情報等が消えてしまいます。
> なので、この方法のままでは解決になりません。

rtfプロパティ(だっけ?)を直接弄るとかはどうでしょうか?
引用返信 編集キー/
■38280 / inTopicNo.5)  Re[4]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ ファイナラ (3回)-(2009/07/10(Fri) 14:11:36)
No38277 (らじうむ さん) に返信
らじうむさん、ご回答ありがとうございます。

> rtfプロパティ(だっけ?)を直接弄るとかはどうでしょうか?

rtf化したものを直接編集する場合、具体的にはどのような手順になるでしょうか?
宜しくお願い申し上げます。
引用返信 編集キー/
■38283 / inTopicNo.6)  Re[5]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ カドルドエグ (93回)-(2009/07/10(Fri) 14:41:32)
No38280 (ファイナラ さん) に返信
> ■No38277 (らじうむ さん) に返信
> らじうむさん、ご回答ありがとうございます。
>
>>rtfプロパティ(だっけ?)を直接弄るとかはどうでしょうか?
>
> rtf化したものを直接編集する場合、具体的にはどのような手順になるでしょうか?
> 宜しくお願い申し上げます。

#らじうむさんじゃないけど…

RTFプロパティはString、すなわち文字列です。
MSDN RTFプロパティ
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.richtextbox.rtf(VS.80).aspx

そして、RTF = Rich Text Formatは以下の仕様に基づいて定義されています。
http://msdn.microsoft.com/en-us/library/aa140277(office.10).aspx
※現時点で英語しか用意されてないようです

RTFプロパティを直にいじれば変更はできると思いますが、
そのためにはある程度この仕様を理解していないと難しいですね。。。
下手すると余計に面倒なことになるかもしれません。
引用返信 編集キー/
■38285 / inTopicNo.7)  Re[6]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ 魔界の仮面弁士 (1147回)-(2009/07/10(Fri) 14:55:11)
2009/07/10(Fri) 15:15:28 編集(投稿者)

No38283 (カドルドエグ さん) に返信
> そして、RTF = Rich Text Formatは以下の仕様に基づいて定義されています。
> http://msdn.microsoft.com/en-us/library/aa140277(office.10).aspx
> ※現時点で英語しか用意されてないようです

それは RTF v1.6 の資料ですね。現時点の最新は v1.9.1 かな。
http://support.microsoft.com/kb/924944/ja
http://www.microsoft.com/downloads/details.aspx?familyid=DD422B8D-FF06-4207-B476-6B5396A18A2B&displaylang=en

Windows の「リッチエディット」コントロールには幾つかのバージョンがあって、
 v1.0 … Riched32.dll (Win95以降)
 v2.0 … Riched20.dll (Win98/NT以降)
 v3.0 … Riched20.dll (WinMe/2000以降)
 v4.1 … MSFTEdit.dll (WinXP SP1以降)
などがあったと思います(それぞれ、サポートする RTF コードに差があります)。
System.Windows.Forms.RichTextBox が呼び出すリッチエディットは、以前調べた時には
v3.0 相当だったと思います(3.0 が使えない場合は 2.0 がロードされたはず、うろ覚え)。


で。VB5 の時代に検証した限りでは、RTF を直接処理した方が早い事は確かです。
再描画を排除して、RTFデータを総入れ替えする事ができますから。

ただ、メソッド一発で変換とはいかないので、それなりに面倒だとは思いますよ。
(それでも、キャラクタセットを限定できるのであれば、難易度は多少下がるかも…)
引用返信 編集キー/
■38294 / inTopicNo.8)  Re[7]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ ファイナラ (4回)-(2009/07/10(Fri) 16:27:02)
カドルドエグさん、魔界の仮面弁士さん、ご回答ありがとうございました。
rtfを直接編集する場合、以下の考え方でよいでしょうか?

1.rtfの本文(\viewkindN以降?)の部分で、\で始まる制御文字を除いた文字を検索する。
 ただし、本文中に{}で囲まれた部分は除外する。
 (目的は半角文字を全角にすることなので、検索される文字はすべて半角のはず)
2.上記で検索された文字を全角に変換する。

もし、これでよいのなら、正規表現を利用した方がよいでしょうか?
アドバイスをお願い申し上げます。
引用返信 編集キー/
■38295 / inTopicNo.9)  Re[7]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ カドルドエグ (94回)-(2009/07/10(Fri) 16:27:22)
No38285 (魔界の仮面弁士 さん) に返信
> それは RTF v1.6 の資料ですね。現時点の最新は v1.9.1 かな。
> http://support.microsoft.com/kb/924944/ja
> http://www.microsoft.com/downloads/details.aspx?familyid=DD422B8D-FF06-4207-B476-6B5396A18A2B&displaylang=en
>
> Windows の「リッチエディット」コントロールには幾つかのバージョンがあって、
>  v1.0 … Riched32.dll (Win95以降)
>  v2.0 … Riched20.dll (Win98/NT以降)
>  v3.0 … Riched20.dll (WinMe/2000以降)
>  v4.1 … MSFTEdit.dll (WinXP SP1以降)
> などがあったと思います(それぞれ、サポートする RTF コードに差があります)。
> System.Windows.Forms.RichTextBox が呼び出すリッチエディットは、以前調べた時には
> v3.0 相当だったと思います(3.0 が使えない場合は 2.0 がロードされたはず、うろ覚え)。
そうだったのですか。
一応調べて(検索して)きたのですが古い情報だったのですね。
御指摘ありがとうございます。
引用返信 編集キー/
■38331 / inTopicNo.10)  Re[7]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ ファイナラ (5回)-(2009/07/11(Sat) 00:09:36)
No38285 (魔界の仮面弁士 さん) に返信
カドルドエグさん、魔界の仮面弁士さん、ご回答ありがとうございました。
rtfを直接編集する場合、以下の考え方でよいでしょうか?

1.rtfの本文(\viewkindN以降?)の部分で、\で始まる制御文字を除いた文字を検索する。
 ただし、本文中に{}で囲まれた部分は除外する。
 (目的は半角文字を全角にすることなので、検索される文字はすべて半角のはず)
2.上記で検索された文字を全角に変換する。

もし、これでよいのなら、正規表現を利用した方がよいでしょうか?
アドバイスをお願い申し上げます。
引用返信 編集キー/
■38353 / inTopicNo.11)  Re[8]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ やじゅ (1091回)-(2009/07/11(Sat) 22:13:45)
やじゅ さんの Web サイト
No38331 (ファイナラ さん) に返信

リッチテキストからテキストだけを取り出したい時、どうするか...、

1.リッチエディトコントロールに読み込んでテキストを取得
2.自力でrtfのパーサを作成
3.他人の書いたライブラリを利用(針谷さんのrtfconv.dllを使う)

Rtfconv.dll を用いたプログラム開発用セット
http://www5b.biglobe.ne.jp/~harigaya/rtfcnv.html#src
http://hp.vector.co.jp/authors/VA012149/labo3.htm


※メモ用リンク

テキストエディタを作るメモ
http://www.kmonos.net/alang/texted/
テキストエディタ実装技術
http://vivi.dyndns.org/tech/tech.phtml

日本語変換確定時のTextChangedイベントについて
http://bbs.wankuma.com/index.cgi?mode=al2&namber=4905&KLOG=14

テキストのシンタックスハイライト
RichTextBoxテキスト色付け高速化計画
http://www.geocities.jp/hatanero/richtextnet1.html
http://www.codeproject.com/KB/cs/shadyrichtext.aspx
http://www.codeproject.com/KB/edit/SyntaxHighlighting.aspx

RichTextBoxの文字列のコピペについて
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=27339&forum=7&start=0

HTMLエディターの作成
http://bbs.wankuma.com/index.cgi?mode=al2&namber=5451&KLOG=15

簡易行番号エディタコントロール
http://winofsql.jp/VA003334/dnettool080530121510.htm
引用返信 編集キー/
■38356 / inTopicNo.12)  Re[9]: リッチテキストボックス内の半角文字を一括で全角文字にしたい
□投稿者/ Azulean (418回)-(2009/07/11(Sat) 23:53:34)
認識している命題
「リッチテキストの"書式情報を維持したまま"、文字列をあるルールで置換してリッチテキストに反映する」
-----
"書式情報を維持する"というのがかなりやっかいな問題だと思います。
書式情報を捨ててテキストを抜き出せば置換は簡単ですが、元の書式情報つきのどの部分に合致するかの特定が困難です。

正規表現でばっちりといく可能性もありますが、多分何か罠があるかもしれません。
最悪は、先頭から逐次解釈になるかも。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -