[阅读: 528] 2007-10-13 08:32:50
使用这种方式可以不用对DFM进行文字替换,而是先转为对象,遍历后来进行繁简的转换,比目前的直接识别DFM中的#再进行繁简转换要强一些。不过需要预先设置对哪些属性进行转换,而不像直接替换方式通过判断#来识别。
AnsiString ComponentToString(TComponent c)
{
AnsiString as;
TMemoryStream* pms = new TMemoryStream();
TStringStream* pss = new TStringStream(as);
try
{
pms->WriteComponent(&c);
pms->Seek(0, soFromBeginning);
ObjectBinaryToText(pms, pss);
pss->Seek(0, soFromBeginning);
as = pss->DataString;
}
catch(...)
{
ShowMessage("Streaming error.");
}
delete pms;
delete pss;
return as;
}
TComponent StringToComponent(AnsiString as)
{
TMemoryStream* pms = new TMemoryStream();
TStringStream* pss = new TStringStream(as);
TComponent *pc;
try
{
ObjectTextToBinary(pss, pms);
pms->Seek(0, soFromBeginning);
}
catch(...)
{
ShowMessage("Streaming error.");
}
pc = pms->ReadComponent(NULL);
delete pms;
delete pss;
return *pc;
}