初めて質問します。教えてください。
メモコンポーネントで改行ピッチを自由に設定することはできますか?
リッチエディットでも構いません。
デルファイパーソナル6です。
改行ピッチというのは…。
ワードラップを何文字で行うかってことでしょうか?
それならたしか、SendMessageで設定できたような気がします。
(あいまいなので間違っていたらごめんなさい^^;)
BorlandのTipsコーナーあたりを、探してみては?
http://www.borland.co.jp/tips/delphi/
あと、Delphian Worldの"リッチエディット拡張メモ"コンポーネントに、
ワードラップ関係の機能がついていたと思いますが、
その中にあるかもしれません。
http://home1.infonia.ne.jp/~delphian/delphi/
もうひとついちおう。
メモのWM_PAINTを横取りして、
デバイスコンテキストに自分で全部書くことも、
不可能ではないかも。
でもこれは、流れさえわかれば難しくはなさそうですけど、どうもなんだか…。
私は、行と行の間隔(行間ピッチ)のことかなと思ったのですが、
もしそうなら、TMemo や TRichEdit では難しいですね。
Delphian World にいくつか行間ピッチの設定のできる
エディターコンポがありますので、それを使うのが簡単です。
TEditor、TSonEdit、AFEdit など、どれも高機能なのものですので
お好みのをどうぞ。
ありがとうございました。私のやりたいことは行間ピッチのことです。
メモのTStringsを他のコントロールのCanvasに書き出すことをやってみましたが、実用に耐えられるものではありませんでした。
エディターコンポがあるとのことですのでそちらを勉強してみます。
ありがとうございました。
ああ、行間ピッチってそのことですね^^;
考えてみれば、当たり前の話、何で気がつけなかったんだろう…(^_^;)
さてさて、それなら、
ふつうのRichEditにECO_SELECTIONBERオプションをセット(EM_SETOPTIONSで)してみたら、
なんとなくですけど、普通のより行間が開きました。
こんなのじゃだめでしょうか?
あと、
> メモのTStringsを他のコントロールのCanvasに書き出すことをやってみましたが、
ですけど、わたしはRichEditのHandleから、デバイスコンテキストを取得し、
キャンバスを扱えるようにした後、
RichEditのWM_PAINTを横取りして、自分で描画を加えてます。
まだ実用にはいたっていませんけど、文字描画以外はみんなRichEditと同じものになるはずです。
これをうまく使えば、TEditorなどのように1から描画(多分)しなくても、
ある程度は使いやすいものができると思いますけど、どうでしょうか?
この方法は、ここを参考にしました。
http://www.geocities.co.jp/SiliconValley-PaloAlto/8945/tips/index2_14.html
>ふつうのRichEditにECO_SELECTIONBERオプションをセット(EM_SETOPTIONSで)してみたら、
>なんとなくですけど、普通のより行間が開きました。
ECO_SELECTIONBER は、Edit領域の左側に、行選択領域を追加する
オプションで、行間ピッチとは関係ないと思います。
>RichEditのWM_PAINTを横取りして、自分で描画を加えてます。
私も、オリジナルのエディタを作ろうと思って、初めは、RichEditと
格闘しましたが、RichEditクラスの制限やパグ?から、RichEditから
派生させるのは断念しました。
現在のエディタの標準の機能と思われる、
行間ピッチ設定、無限アンドゥー、リドゥー、大きなファイルの編集、
などを実現しようと思うと、RichEditでは難しいと思いました。
では、では。
> ECO_SELECTIONBER は、Edit領域の左側に、行選択領域を追加する
オプションで、
> 行間ピッチとは関係ないと思います。
でも、実際にやってみると、行間が開きましたよ?
DelphiのエディタやTerapadなどのエディタと見比べてみると明らかな違いです。
実際にやってみたんですから、間違いありません。
なんだか、Delphiのエディタは、おおもとはRichEditを使ってるとか、
どこかで聞いた気がするんですけど、
全部自分で書いてるとしても、大変な労力ですね。
> 行間ピッチ設定、無限アンドゥー、リドゥー、大きなファイルの編集、
> などを実現しようと思うと、RichEditでは難しいと思いました。
複数回のアンドゥとかは、どちらにしても自分でやるものだと思いますけど。
TEditorも、結局コンポーネントが自分でやっている(ただ使う側がさわらなくてもいいだけ)わけですし。
できる人にとっては、あんまり難しくなさそうです。
VBなどのそういうコンポーネントがない環境でも、
結構何度もアンドゥをできるエディタを作ってる人がいますし。
RichEdit2は、最初から何度もアンドゥできるみたいですけどね。
行間ピッチは、WM_PAINTを一切RichEditに送らない(画面内の普通の文章も全部自分で書く)ことにすれば、
結構自由に調節できると思います。
色分けとかも、同じくコンポーネント(という概念そのもの?)がないHSPなどにも、
ちゃんと色分けをしてくれるエディタがありますからね。
たぶん、RichEditか、複数行のEditを使ってると思います。
でも、たしかにWindowsの標準コントロールにしてはちょっと…。
Richじゃないんじゃないかなあと思います^^;
"わりとまともに使えるテキストエディタを作るには、全部自分で書きましょう"じゃ、ちょっと^^;
色分けはある程度仕方ないとしても…。
ちょっといじくれば、開発環境のソースコードエディタになるくらいの、
コントロールが提供されてればいいんですけどねぇ。
文句を言っても仕方ないですけど…。
長々と失礼しました^^;
あんまり質問とは関係ないものばっかりですけど。
> でも、実際にやってみると、行間が開きましたよ?
おかしいですね。
私もECO_SELECTIONBARをオンにしたRichEditを使ったソフトを
公開していますが、行間隔は、オフの場合と変化はありません。
行選択領域が追加されるので、左余白はあきますが。
>DelphiのエディタやTerapadなどのエディタと見比べてみると明らかな違いです。
>実際にやってみたんですから、間違いありません。
Terapadは、左余白、行間隔、どちらも細かく設定できますね。
で、Readme.txtを見たらTEditorを使っているじゃないですか。
>なんだか、Delphiのエディタは、おおもとはRichEditを使ってるとか、
>どこかで聞いた気がするんですけど、
それはないと思います。RichEditは、
Win9X系のOSでは、大きなファイルを読み込ませると、まともに動きません。
また、非常に重くなります。Delphiのエディタでは、
そんなことはありませんから。
>全部自分で書いてるとしても、大変な労力ですね。
まともなエディタはたいてい全部自分で書いていると思います。
例えば、前に例にあげた AFEdit は、フリーでソースも公開されていますが、
6000行を越えるボリュームがあります。大変な労力だと思います。
TEditor だと、万の桁だそうです。
> 複数回のアンドゥとかは、どちらにしても自分でやるものだと思いますけど。
> TEditorも、結局コンポーネントが自分でやっている(ただ使う側がさわらなくてもいいだけ)わけですし。
>できる人にとっては、あんまり難しくなさそうです。
できないことはないですけど、RichEditに、実際に実装しようとすると、
結構、めんどくさいですよ。実際にやろうとして、苦労しましたから。(^_^;)
コンポーネントが自分でやってくれればそれに越したことはないです。
> 行間ピッチは、WM_PAINTを一切RichEditに送らない(画面内の普通の文章も全部自分で書く)ことにすれば、
>結構自由に調節できると思います。
うーむ、それをするぐらいなら1から書いた方が楽だと思いますけどね。
> 色分けとかも、同じくコンポーネント(という概念そのもの?)がないHSPなどにも、
>ちゃんと色分けをしてくれるエディタがありますからね。
色分けは、RichEdit は最初から実装してますね。
ただ、TEditor等と比べると、面倒だし、重いです。
> でも、たしかにWindowsの標準コントロールにしてはちょっと…。
>Richじゃないんじゃないかなあと思います^^;
>"わりとまともに使えるテキストエディタを作るには、全部自分で書きましょう"じゃ、ちょっと^^;
要求水準によりますが、高い水準を求めるなら、RichEdit は、使い物にならないと、私的には思ってます。
大変な労力を使って作られた高機能のコンポーネントが公開されているので、
作者に感謝しつつ、利用させて頂くのが、一番ではないかと。。。
> ちょっといじくれば、開発環境のソースコードエディタになるくらいの、
>コントロールが提供されてればいいんですけどねぇ。
TEditor等は、ソースコードエディタになるくらいの実力は持っていると思います。
ということで、私も長々と失礼しました。
追伸
ほんとうに色々とありがとうございました。
まず、フリーのコンポを勉強するのはあきらめました。実力不足で・・・
そして、メモにCanvas持たせてってやってみましたが、ちらつきが激しくこれも断念しました。
今は、StringGridのラインを0にして、カラムを1にして、TStringList持たせて頑張ってます。
文字入力時のCaretとか、次行へ移るタイミングやら途中行削除したときの処理とか問題は多いのですが、もうちょっと試行錯誤してみます。
本当にありがとうございました。
ツイート | ![]() |