RichEdit.PlainText似乎不会影响任何东西

时间:2013-05-20 13:56:37

标签: c++builder richedit c++builder-6

我正在尝试在BCB6中编写类似rtf编辑器的东西,并且在尝试将表添加到我的RichEdit1时遇到了这样的问题:

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

此代码将格式化文本(表格代码)添加到RichEdit1,而不是将格式代码添加为纯文本并将其显示为表格。

我做错了,还是其他问题。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

问题已解决,由于表格代码不在{}括号中,因此在表格代码中添加表格代码并使用SendMessage之后未添加格式,程序运行良好。