0

既存の 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);
}

} `

4

2 に答える 2