- PR -

VC++2005 RichTextBoxでのシンタックスハイライト

1
投稿者投稿内容
HIZ
会議室デビュー日: 2008/03/21
投稿数: 1
投稿日時: 2008-03-21 17:24
C++/CLI初心者です。
RichTextBoxでのシンタックスハイライトをしたいのですが、なかなか成功できません。
根本的にどのような順序ですればいいのか教えてください。

現在は、RichTextBox内が変更されたら、カーソルの周りの一定範囲だけを検索して
います。

下記のコードでは、ハイライトされるのが遅くなったり、
1行おきにキーワードを書き、上のキーワードをけすと、下のキーワードが選択
されたままになってしまいます。それとキーワードの一部を消してもハイライトが
解除されません。

もし根本的な間違いでしたら、お手本になるページやコードを教えて
いただけると光栄です。

ご助言の程宜しくお願いいたします。

BTextBoxはRichTextBoxです。

=====================================
private: System::Void BTextBox_TextChanged(System::Object^ sender, System::EventArgs^ e) {

int SePos = BTextBox->SelectionStart;//SePos・・・最初の選択の場所

for each(String^ wd in Keywords){

int SPos = BTextBox->SelectionStart - 15;//検索開始位置用

while(true){

int IPos = 0;//検索結果用

BTextBox->SelectionLength = 0;

BTextBox->Focus();

if (SPos > 0 && SePos > SPos){

IPos = BTextBox->Find(wd,SPos,SePos,RichTextBoxFinds::None);}

else{IPos = BTextBox->Find(wd,0,SePos,RichTextBoxFinds::None);}

if (IPos == -1){

BTextBox->SelectionColor = System::Drawing::Color::Black;

break;

}

BTextBox->SelectionColor = System::Drawing::Color::Red;

SPos += wd->Length;

BTextBox->SelectionLength = 0;

BTextBox->SelectionStart = SePos;

BTextBox->SelectionColor = System::Drawing::Color::Black;

if (BTextBox->TextLength <= BTextBox->SelectionStart) break;

};

}
=====================================




1

スキルアップ/キャリアアップ(JOB@IT)