如何用代码在Memo控件中设置可撤销的赋值

怎么用代码在Memo控件中设置可撤销的赋值?
比如:
  Memo1->SelText=L"    "; // 不能被撤销
  SendMessage(
Memo1->Handle
,
EM_REPLACESEL
,
1 ,
(long)(L"    ").c_str()
  ); // 可以被撤销
它们只针对选中的文本,而:
  Memo1->Lines->Text=L"    "; // 不能被撤销
  SendMessage(Memo1->Handle,WM_SETTEXT,(WPARAM)NULL,(long)(L"    ").c_str()); // 不能被撤销
虽然针对全部文本但却不能被撤销,有没有什么办法不选中任何文本也不通过剪贴板,而替换MEMO的全部文本而又能被撤销?(就是替换后MEMO的右键菜单上的撤销亮,或ctrl+z可以回复到之前的文本)

------解决方案--------------------
如何用代码在Memo控件中设置可撤销的赋值