ギリギリ行けるお一人様のライン

c#の素人です。
文字装飾可能な入力ボックスとしては、リッチテキストボックスがありますが、個別の文字位置を取得できず、またOnPaintのイベントがありませんので、上書き描画がうまくできません。
それでしたいことは、ヘルプ画面のように、一部の文字を反転させたり、装飾させて、テキスト形式(HTML)で保存させたいのですが、MSHTMLコンポーネントでは使い勝手が悪すぎます。
リッチテキストボックスに変わるような、使い勝手のいいものはないのでしょうか。
無いならば、多機能はいらないので手作りしようかと思うのですが、基本的にどのような考え方で進めばいいのか、独学なものでわかりません。
C++の考え方でもいいのですが、その道筋、もしくはその他の打開策を教えてください。

A 回答 (3件)

#2の返答欄、読みました。


なるほど。状況が良くわかりました。
----------------------------------

■リッチテキストボックスのHTML出力について。
僕が「リッチテキストボックスでHTML出力できる」と言ったのは、
実はまさに
「自力でRTFを解読してHTMLかXMLに変換する」
ことを指したものでした^^;(スミマセン…)

■MSHTMLの使い勝手について。
状況がよくわかりました。
主に「機能や使い方が、わかりやすくない」ということですよね。
---------------------------

●僕が想像するに、MSHTMLを使えば、
とりあえずホームページビルダー(←知ってますよー)のような
「WYSIWYGなHTMLエディタ」は
デフォルトでほとんどそのままできる気がするのですが・・・。
ここ
http://www.microsoft.com/japan/msdn/academic/Art …
http://msdn.microsoft.com/library/ja/jpwebwk/bro …
を見る限りでは。正確なところはわからないのですが。

●「文字列の背景色」についても、
これ(MSHTML)をつかって実現可能のような気がします。
(僕が前に「文字列の背景色はできないかも」と書いたのは、
HTMLタグに「文字列の背景色指定タグ」があることを知らなかった^^;)

●こういうの
http://www.microsoft.com/japan/msdn/academic/Art …
を読むと、
MSHTMLはけっこういろいろできそうな気が。
たとえばXML形式でのファイル保存はもちろん、
(ファイルを介せずに)直接にHTMLデータを挿入したり削除したり、
いろいろできるような気が。

●「検索該当文字の、なんらかの強調表示」について。
http://msdn.microsoft.com/library/ja/jpwebwk/bro …
『基になる文書のソースを変更せずに、表示されたページに
強調表示やテキスト装飾を追加する際に使用できます』
『もう 1 つの使用例は、スペル チェックを行うデザイナで、
つづりが正しくない語の下に波線を表示する処理です』
という記述が、それっぽい?

●「隠し属性と、関連データ呼び出し」について。
http://msdn.microsoft.com/library/ja/jpwebwk/bro …

なんかいろいろできそう!?(すいません、実はよくわかりません。)
理屈から考えれば、
たとえばMSHTMLがマウスクリックイベントを拾うことができ、
そのマウスクリックが「XMLツリーのどの要素上で起こったか」を判別できる関数がMSHTMLに装備され公開されてるなら、
実現可能だと思うのですが…。
よくわかりません。
----------------------------

▲おまけ1
こんなの見つけました。
HTMLEditor
http://www.itwriting.com/htmleditor/index.php
http://itwriting.co.uk/htmleditor/docwiki/Wiki:H …

MSHTMLのラッパー・コンポーネントで、C#で書かれてるみたいです。
使うに値するのかそうでないのか
僕には判断する手段がないのですが、
ソースコードがついてるみたいなので、
何かのヒントにはなるかも。

▲おまけ2
MSHTMLの公式チュートリアル?
MSHTMLはけっこう強力なコンポーネントっぽい。
でも解説はC++で書かれてるみたい。(これをC#に適用できるのかは
わかりません)
http://msdn.microsoft.com/workshop/browser/editi …
-----------------------

ぼくにわかることは、これくらい。
もっとMSHTMLにお詳しい方から意見を聞くのもいいかも。
    • good
    • 0
この回答へのお礼

随分ご丁寧に、感動・感激しました。
以前、MSHTMLを耳にして、一応目にしたところもあったのですが、
何分、右も左もわからないヒヨッコですから、疑心暗鬼で、
習得以前に放棄しちゃいました。
でも、WYSIWYGをこの度はじめて知って、がぜんファイトが出てきました。
c#に組み込める「WYSIWYGなHTMLエディタ」があれば非常に幸いなのですが、
ともかく文章管理の大本ができないと前に進めなくて、
大木こだま・ひびきじゃーないけど、往生してました。
本当にこの度はありがとうございました。
また何か気づくことがあったら教えてください。
MSHTMLの習得には多少時間がかかると思いますので、
(実は、一昨日、Visual Studio 2005にUPしちゃいました。
SQL Serverも初めてなんで……)
ともかくがんばります。ありがとうございました。

お礼日時:2006/02/09 10:44

#1です。


C#知らないので、恐縮です。(※Javaしか知らない^.^)
ちょと思ったことと、不明な点があるのですが・・・。


>それでしたいことは、
>ヘルプ画面のように、一部の文字を反転させたり、
>装飾させて、テキスト形式(HTML)で保存させたいのですが、
>MSHTMLコンポーネントでは使い勝手が悪すぎます。


>リッチテキストボックスがありますが、、
>またOnPaintのイベントがありませんので、上書き描画がうまくできません。


とりあえず「既存のコンポーネント」として
・リッチテキストボックス
・MSHTMLコンポーネント
の2つがありますよね。

で、やりたいことは
(a)一部の文字列の反転(背景色適用)
(b)よくある普通の装飾(スタイルとかサイズとか色とか下線とか)
(c)HTML形式での保存

で、既存コンポーネントで不満な点は
(d)MSHTMLは、使い勝手が悪い
(e)リッチテキストボックス(とおそらくMSHTMLも?)は、上書き描画ができない

--
■不明な点
・(d)について。
MSHTMLのどんな所が、使い勝手が悪いのですか?
逆に、リッチテキストボックスは、使い勝手がいいのですか?

■思ったこと
・(e)について。
既存のコンポーネントを使う限り、「上書き描画」は期待できないかも!?(自信なし)
・(a)について
一部の文字列への背景色適用は、
これも自作コンポーネントを作らないと無理かも!?(自信なし)
・(b)(c)について
この機能は、おそらく「リッチテキストボックス」と「MSHTML」の両方で可能
・だから「上書き描画」と「文字列への背景色適用」さえあきらめれば、
(使い勝手の問題をのぞけば)既存のコンポーネントで、
質問者さんの要求が満たされるかも?
    • good
    • 0
この回答へのお礼

リッチテキストボックスがHTMLで保存できるのは知りませんでした。
また、ご指摘のとおり、上書き描画や背景色の一部変更をあきらめれば、問題が無いかも知れません。
ただ、悪い癖のこだわり点は、
A)文章管理において、カラー文字に加えて、検索時に該当文字を明確にわかりやすくさせたい(文字反転が最適?)。
B)隠し文字か属性を表示文字に潜ませ、関連データを呼び出せるようにした。
C)願わくは、XMLで保存したい。なおデータ入力や画面表示は簡単にさせたい。

ABCは行いたいことの優先順序ですが、
■リッチテキストボックスでは、
 文字反転ができない上、RTFを解読してHTMLかXMLに変換するのは困難だった。※HTMLで保存できることを知らなかった。

■MSHTMLにおいては、
 使用方法がよくわからなくて、ファイルからの呼出しや保存はできたのですが、データベースで管理できる文字列(string型)からの読込みや保存の方法がわからなかった。
 その上、データ入力がMSHTML上でできるのかどうかさえわからなかった。
 ※リッチテキストボックスは表示画面に直接入力や編集ができ、それをもって使い勝手がいいと言った。

正直なところ、自作は避けたいし、Wordやc#の入力画面、またご存知でないかもしれませんが、ホームページビルダーの入力画面等、本当に使い勝手のいい入力編集画面が昨今あり溢れているのだから、たとえ有償であってもいいものがやがて登場するだろうと思えて、決心を鈍らせ、足踏み状態にあります。
手作りが簡単にできればいいのですが……
どうすればいいのでしょうかね……
MSHTMLでできますかね……
日々、トホホ…です。

お礼日時:2006/02/04 14:02

C#を知らないので、


該当コンポーネントがあるかどうかは
知らないのですが…。
---

>手作り


想像ですが、
イメージ的には「文字が書かれたカード」を何枚も並べる感じ
だと思います。
---

たとえばHTML表記で

あ<font size=VeryVeryVeryLarge>いう</font>え

というデータがあった場合、

(1)メモリ的に、「あ」と「いう」と「え」の3つのカードに分解する。
(※配列とか、いろいろ)
(2)表示は、「カードを並べる」。
(3)編集は、
たとえばマウスクリック位置やキャレット(カーソル)が
「どの表示カードに触れているか」をまず探って、
次に「その表示カードはメモリ上のどのカードに相当するか」を探って、
実際の「データの編集(※文字を挿入したり削除したり)」は
その「メモリ上の該当カード」に対して行う。
---

とか、やるんじゃないかなあ…。自信ないですが。
全部ちゃんとやるとなると、けっこう大変そう。


・編集機能をなくす
・文章中のフォントを固定する
・文字の幅も固定する

とかやれば、その分、簡単になると思います。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。やっぱり手作りだと大変ですよね。
でも、どうしてこんなに基本的で需要大と思われるコンポーネント
提供してくれないんでしょうかね。
他の皆はリッチテキストボックスで満足しているのでしょうか……
文章を管理するデータベースがほしいもので……
アドバイスほんとにありがとうございました。
わからないことばっかりなので、なんでもどんどん教えてください。

お礼日時:2006/02/03 11:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報