リッチエディットで特定文字の色を変える

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

リッチエディットで特定文字の色を変える

#1 投稿記事 by yu0627 »

 タイトルのとおりです。過去ログにあるようなnEditを使わず、すべて自前でプログラムを組もうとしています。 
現在、あと特定文字を検索し色を変える部分まで来ているのですが、そこからがうまくいきません。
 コードはActiveBasicLifeにあったサンプルを改造してきています。
試行錯誤しているので必要のないプログラムまで混ざっていますが。
できないのは、リッチエディット内のテキストを検索するところです。
EM_FINDTEXTEXを使っていますが、いっこうに検索されません。
これができなければ無理なんです。
 どこがおかしいか、ご指摘お願い致します。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: リッチエディットで特定文字の色を変える

#2 投稿記事 by 7 »

> EM_FINDTEXTEXを使っていますが、いっこうに検索されません。
コードを動かしてないので違うかもしれませんが、「'キーワードを検索し、その部分の文字色を変更」の下のコードではEM_FINDTEXTが使われています。EM_FINDTEXTEXの間違いではないでしょうか?

メモ帳にコードを移して「EM_FINDTEXTEX」と検索した所引っかからなかったのでビックリしました...。
yu0627@携帯向けフルブラウ

Re: リッチエディットで特定文字の色を変える

#3 投稿記事 by yu0627@携帯向けフルブラウ »

> > EM_FINDTEXTEXを使っていますが、いっこうに検索されません。
> コードを動かしてないので違うかもしれませんが、「'キーワードを検索し、その部分の文字色を変更」の下のコードではEM_FINDTEXTが使われています。EM_FINDTEXTEXの間違いではないでしょうか?
>
> メモ帳にコードを移して「EM_FINDTEXTEX」と検索した所引っかからなかったのでビックリしました...。
すみません。あなたのいうとおりです。ごちゃごちゃやったまま残っているだけです。正しくはEM_FINDTEXTEXです。

後一つ。「いっこうに検索されません」と書きましたが正しくは「検索はされるが検索対象文字はあるのに取得できない」です。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: リッチエディットで特定文字の色を変える

#4 投稿記事 by 7 »

> 後一つ。「いっこうに検索されません」と書きましたが正しくは「検索はされるが検索対象文字はあるのに取得できない」です。
検索対象文字はあるのに取得できないですぐに分かりました。
「'キーワードを検索し、その部分の文字色を変更」の下で ftex.chrg.cpMin=1とありますが、正しい値は0です。自分もたまに間違えてしまうんですよね...。
http://yokohama.cool.ne.jp/chokuto/uraw ... RANGE.html

色分け、すごいですね。脱帽です。
自分も昔自力で強調表示してみたかったんですが全く分からなくてここで質問したことがあります。

追記。
どうでもいいですが、登録日と投稿数が同じですね(笑
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#5 投稿記事 by yu0627 »

検索対象文字はあるのに取得できないですぐに分かりました。
「'キーワードを検索し、その部分の文字色を変更」の下で ftex.chrg.cpMin=1とありますが、正しい値は0です。自分もたまに間違えてしまうんですよね...。
http://yokohama.cool.ne.jp/chokuto/uraw ... RANGE.html
 ありがとうございます。指摘されたところを修正し、プログラムを改造したら、
以下のコードで複数のキーワードの色分けをすることができました。
 しかし、これでも問題があります。
①「FixedSys」をフォントとして設定しているのに英字が「Arial」というフォントになってしまう
②既に色分けが行われた状態で日本語を入力すると、文字色を元の黒色に戻すところでエラーが起きる

 プログラムを見直したのですが、原因が分かりません。なお、他の部分はいじっていません。
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#6 投稿記事 by yu0627 »

 あれから、キーワードファイルを用意し、それを読み込んで色を変えるようにしました。
しかし、それで大問題が発生しました。
 テキストを選択しながら色を変えていくので、大量の文章を貼り付けて編集すると、
画面がスクロールしてしまいます。かといって、色分け中にリッチエディットを非表示にすると、
そのあとの表示がおかしくなります。また、一秒以上時間がかかります。
僕がやりたいのは、ProjectEditorのような感じです。
どうするればいいのでしょうか。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: 返信@yu0627

#7 投稿記事 by 7 »

> 画面がスクロールしてしまいます。かといって、色分け中にリッチエディットを非表示にすると、
> そのあとの表示がおかしくなります。また、一秒以上時間がかかります。
LockWindowUpdate()関数でウィンドウの描写を無効にしてから色分けし、終わったら描写を有効にしてみてはどうでしょう。

昔、ファイラーを作っていてファイルを片っ端から検索してリストビューに追加してて、それに14秒近くかかったんですが、描写を無効にしてから追加したら処理が1秒程度で終わり、ズララララーではなくパっ、と表示されるのは見ていて美しかったのを覚えています。
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#8 投稿記事 by yu0627 »

LockWindowUpdate()関数でウィンドウの描写を無効にしてから色分けし、終わったら描写を有効にしてみてはどうでしょう。
 ありがとうございます。
言われたとおりにすると、うまくいきました。
また、カーソルが表示される部分が移ってしまうので、コードをいじって元に戻すようにしました。
しかし、反応が遅いです。また、アンドゥが効かなく、色を変えたものもアンドゥに入ってしまいます。
なんとかその部分のアンドゥをなしにする方法はないでしょうか。
 今のコードはこのようになっています。

...。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: 返信@yu0627

#9 投稿記事 by 7 »

> しかし、反応が遅いです。また、アンドゥが効かなく、色を変えたものもアンドゥに入ってしまいます。
> なんとかその部分のアンドゥをなしにする方法はないでしょうか。
ぅ~ん...コードも見ずに言うのは無責任ですが、強調表示はリタイヤした身ですので恐らく自分には分かりません...。
過去ログ「BackSearchAB」で自分のログを読むと(Space)さんが強調表示に詳しいようなんですが...。

直接的な回答にはならなくて申し訳ないのですが、ログに使えそうなリンクがありました。
nakka様の独自エディットコントロール

Discoversoftのトップページから「BackSearchAB」をダウンロードしてきて「色分け表示」と検索すると詳しいことが書いてあります。
yu0627@携帯向けフルブラウ

返信@yu0627

#10 投稿記事 by yu0627@携帯向けフルブラウ »

そのエディットコントロールは前にダウンロードしました。
しかし、コメントが「//」なのです。それを変えるにはDLLのプログラムを弄らないといけないので。
そのプログラムがC言語だったのでこうしようと思いました。
今はリッチエディットコントロールのアンドゥ記録を一時的に無効にすることが出来ないかと。それが出来るなら一気に話は進みますが。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: 返信@yu0627

#11 投稿記事 by 7 »

> 今はリッチエディットコントロールのアンドゥ記録を一時的に無効にすることが出来ないかと。
ご希望通りか分からないのですが、リッチエディットにEM_REPLACESELをFALSEと文字列なしで送信してやるとイケるかもしれません。
力技です。

コード: 全て選択

SendMessage(hRich,EM_REPLACESEL,FALSE,NULL)
EM_REPLACESELをFALSEで送るとそれまでのアンドゥ記録を消去?してくれるんですが、リッチエディットは試してないですし多段階アンドゥはアンドゥできちゃうかもしれません。
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

Re: 返信@yu0627

#12 投稿記事 by yu0627 »

> > 今はリッチエディットコントロールのアンドゥ記録を一時的に無効にすることが出来ないかと。
> ご希望通りか分からないのですが、リッチエディットにEM_REPLACESELをFALSEと文字列なしで送信してやるとイケるかもしれません。
> 力技です。
>

コード: 全て選択

SendMessage(hRich,EM_REPLACESEL,FALSE,NULL)
> EM_REPLACESELをFALSEで送るとそれまでのアンドゥ記録を消去?してくれるんですが、リッチエディットは試してないですし多段階アンドゥはアンドゥできちゃうかもしれません。
 ありがとうございます。
試してみたところ、色を変えた部分のアンドゥを消すことが出来ました。
しかし、文字入力のアンドゥまで消されてしまいました。
アンドゥ機能については、自分で実装してみようと思います。
 まだ問題はあります。

①半角英数字のフォントが別のものになってしまう
②日本語を入力するとなぜかフォント色の変更に失敗する。
③色変更前の表示状態に戻せない。

 ③については、キーワードを選択しながら色変更をしていくので、どうしても
もとの位置にカーソルを戻してもスクロールバーなどの位置が元に戻らないんです。
現在のコードはこちら


追記
②についてはエラー表示を強制的になしにすることで解消しました。
返信する