0

BCB6 で rtf エディターのようなものを作成しようとしていますが、RichEdit1 にテーブルを追加しようとしているときにこのような問題が発生しました。

    RichEdit1->PlainText=true;
    AnsiString ret=RichEdit1->Text;
    ret.Insert(table, RichEdit1->SelStart);
    RichEdit1->Text=ret;
    RichEdit1->PlainText=false;
    RichEdit1->Repaint();

このコードは、書式設定コードをプレーン テキストとして追加して表のように表示する代わりに、書式設定されたテキスト (表のコード) を RichEdit1 に追加します。

私のやり方が間違っているのでしょうか、それとも何か他の問題である可能性があります。

4

2 に答える 2

0

{}問題が解決しました。表コードが角かっこで囲まれていないため、書式設定が追加されませんでした。表コードの周りにそれらを追加して を使用するSendMessageと、プログラムは正常に動作します。

于 2013-05-22T19:47:06.363 に答える
0

このプロパティは メソッドとメソッドでPlainTextのみ使用され、それ以外には使用されません。Lines->LoadFrom...()Lines->SaveTo...()

このTextプロパティはプレーン テキストでのみ動作します。プロパティを読み取ると、RichEdit のテキスト コンテンツが書式設定なしで抽出されます。このプロパティを設定しても、RTF コードはまったく処理されず、RichEdit のテキスト コンテンツは新しいテキストにそのまま置き換えられます。

RTF コードを RichEdit に挿入する場合、特に RichEdit の現在のコンテンツを上書きしたくない場合は、EM_STREAMINメッセージを直接使用する必要があります。例えば:

DWORD CALLBACK StreamInCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
    int numRead = reinterpret_cast<TStringStream*>(dwCookie)->Read(pbBuff, cb);
    if (pcb) *pcb = numRead;
    return 0;
}

TStringStream *strm = new TStringStream(table);

EDITSTREAM es = {0};
es.dwCookie = (DWORD_PTR) strm;
es.pfnCallback = &StreamInCallback;
SendMessage(RichEdit1->Handle, EM_STREAMIN, SF_RTF | SFF_SELECTION, reinterpret_cast<LPARAM>(&es));

delete strm;
于 2013-05-21T05:21:17.753 に答える