- - PR -
VC++2005 RichTextBoxでのシンタックスハイライト
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