既存の C++ CodeGear プロジェクトで検索機能を作成しています。
単語をダブルクリックすると、その単語のすべての出現箇所の背景が notepad++ のように緑色でペイントされます。
色を適用する前に、元のTRichEDit
テキストを TMemoryStream に保存して、元のテキストを取得できるようにしています。のクリックイベントで色を通常にリセットしましたTRichEdit
。
TMemoryStream
検索語の出現ごとに、またはメッセージのようなメッセージを使用して保存する方法があるかどうかを知りたいEM_STREAMOUT
ですか?
今のところすべて問題なく動作していますが、TRichEdit
テキストが大きすぎると、すべてのテキストの大きなメモをリロードするのに永遠に時間がかかります。すべてのテキストをリロードするよりも、変更された単語の色だけを覚えておく方がよいと思います。
私は本当にプログラミングの初心者です。それが十分に明確でない場合は教えてください。
動作し、単語の出現箇所に背景色を設定している私のコードは次のとおりです。//リストをリセット
strTextToParse = AnsiReplaceText(strTextToParse, "\r\n", "\n");
int nPrevTagPos = 0;
int nTagPos = strTextToParse.AnsiPos(strWordToFind);
while (nTagPos != 0)
{
int nPosMin = nPrevTagPos + nTagPos - 1;
//List of all the occurrence in the TRichEdit with their position in the text
//It's not a list of int, but it POINT to adresses of INT so it's the same result =)
lstOccurrences->Add((TObject*) nPosMin);
//Change color of background when there is an occurrence
changeBgColor(reTextToSearch, strWordToFind, nPosMin +1, 155, 255, 155); //lime
bColorWasApplied = true;
nPrevTagPos = nPosMin + strWordToFind.Length();
strTextToParse = strTextToParse.SubString(nTagPos + strWordToFind.Length(), strTextToParse.Length());
nTagPos = strTextToParse.AnsiPos(strWordToFind);
}
} `