テキストのいろ変えとか、いろいろよく見かけますけど、
あれはどうやってるんでしょうか?
速さからして、Instrとかを使って、
地道にやっているわけではないようですけど…。
Replaceでできるのかなぁ…。
「秀丸」などテキストのURL部分が赤色で他の文字列が黒色とか言う奴ですか?それだったら、Textout()APIとWM_PAINTメッセージなどを使って自分で描画しているのではないでしょうか。たぶん。
見つけました。Textoutですよね。
でも、これって引数に何を入れるんでしょう?
(ByVal hdc As Long,yVal x As Long,ByVal y As Long,
ByVal lpString As String,ByVal nCount As Long) As Long
hdcはMe.hwndですよね?で、lpstringは対象の文字列、
nCountには…、-1かな?
あと、xとy、どっちかにWM_PAINTを入れるんですよね…^^;
あうう…。
一色だけならすぐできるんですけどね、
With MainText
.SelStart=0
.Sellength=Len(.Text)
.SelColor=RGB(Random(255,0),Random(255,0),Random(255,0)) .BackColor=RGB(Random(255,0),Random(255,0),Random(255,0))
End With
みたいに^^;
TextOut()API
hdc デバイス コンテキストのハンドル
nXStart 論理x座標を指定
nYStart 論理y座標を指定
lpString 描画される文字列を指すポインタ
cbString 文字列内の文字の数
WM_PAINTメッセージ
ウィンドウの一部の描画を要求するときに送られる。
※ちなみ、これだけでは色が変更できません。
テキストボックスをオーナードロー(ここでWM_PAINTを使用)しないと駄目だと思います。
オーナードロー
・・・Windows標準のコンポを自分で全て描画すること
リッチテキストボックスを使ってみたらどうですか?
> リッチテキストボックスを使ってみたらどうですか?
え?秀丸のってリッチテキストボックス(みたいなもの)ですよね?
ただ
With Maintext
i=Instr(1,.text,"<")
n=Instr(i,.text,">")
.Sellength=n-I
END With
ってやると、やっぱり時間がかかってしまうから、
それ以外の方法がないかなぁって…。
私も今、編集しながらタグだけの色を変えたりしたいと
思っているのですが、結局どうしたのでしょうか、たかみちえさん・・・。
リッチテキストボックスで選択して色を変えるというのは
分かるのですが、それを編集しながらなので、
邪魔にならないように処理することに悩んでいます。
ワイルドカードを検索に使えれば、少しは早くなりそうなのに…。
どうにかいい方法はないでしょうかねぇ…。
Layer-8にVBScriptを使って正規検索('.*とか)する方法がありました。
それを使えば、ただ単にやるだけよりはずいぶん早くなります。
あとはテキストエリアを描画しない(非表示)なら、ずいぶん早くなり、
さらに行表示とかのステータスバーも描画しないとなれば、もっと早くなります。
(ただ、いくつもあると遅くなるので、現状表示もかねて表示してますけど)
でもまだ上があると思います。それに、VBのエディタのように流れるような色がえができません。
さぁーて、どうしましょうかねぇ…。
(VBのように決まった単語の色がえだけなら、ある程度早くはなりそうですが)
速さを求めるには、JRE32.dllあたりを使うそうですけど…。
よく分からないです。
どなたかしりませんか?
ああ、そうそう、RTFコード単位でおきかえる方法もありますね、
HTMLでVBコードを記述しておいて、
JavaScriptを使っていっぺんに色がえしているページがありましたから、
Replace関係ですませられれば、早く済みそうです。
しつこいですけど、上記の方法じゃ解決しないかも…。
JRE32はわかりませんけど。
んー、アイディアの問題かなぁ…。
正規検索にはBASP21というものを使うようにしました。
さて、それでも速度は問題ですけど、
今見えてる領域のみ色がえが出きればある程度は…。
初心者掲示板で"今見えている最初の行番号を得る"SendMessage定数のことがありましたけど、
最終行はわかりますか?
行番号を書くには上だけわかればいいですけど、
したがわかれば、問題ない程度に文字の色がえとかもできるかもしれないし…。
ツイート | ![]() |