我正在尝试用BCB6编写类似rtf编辑器的东西,在尝试向我的RichEdit1添加表时遇到了这样的问题:
RichEdit1->PlainText=true;
AnsiString ret=RichEdit1->Text;
ret.Insert(table, RichEdit1->SelStart);
RichEdit1->Text=ret;
RichEdit1->PlainText=false;
RichEdit1->Repaint();这段代码将格式化文本(表格的代码)添加到RichEdit1,而不是将格式化代码作为纯文本添加并像表格一样显示。
我是不是做错了,或者这可能是其他事情的问题。
发布于 2013-05-21 13:21:18
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-23 03:47:06
问题解决了,由于表代码不在{}括号中,所以没有添加格式,在表代码周围添加并使用SendMessage后,程序运行良好。
https://stackoverflow.com/questions/16651140
复制相似问题