我要嗝屁了,TMemo控件保存问题,100分献上

caomeng2002 2002-06-12 02:20:52
我动态生成一些TMEMO控件,并在上面可以输入一些文字,因为在下次打开时要原样打开所以我用流TFileStream保存和打开(用WriteComponentRes和ReadComponentRes),类以注册 (
TMetaClass *cl[1]={__classid(TMemo)}
RegisterClasses(cl,0);

为什么当控件上没有文字时保存的可以打开,而有文字的就报错呢?是不是还有什么类没注册呀?
...全文
106 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
嗬嗬,有用就好,一起进步!多多支持BCB论坛!
caomeng2002 2002-08-14
  • 打赏
  • 举报
回复
今天试了一下(〖烟波浩淼三千里、人鬼殊途五百年〗) 的方法,感觉比我原来的方法好!
钛哥 2002-08-14
  • 打赏
  • 举报
回复
mark
caomeng2002 2002-08-13
  • 打赏
  • 举报
回复
谢谢大家!
贴了这么长时间,我其实早就解决了!不过和(〖烟波浩淼三千里、人鬼殊途五百年〗) 有一些不同。当然大部分还是一样的。关键是我把“Lines.Strings = (“”)”分开处理了。这样可以生成“后”在添加,就是这样。非常感谢[烟波浩淼三千里、人鬼殊途五百年〗等高手,我的好好研究研究你的代码,给分了。再次感谢各位帮忙!
  • 打赏
  • 举报
回复
已解决....
AnsiString ComponentToString(TComponent* Component)
{

TMemoryStream* ms;
TStringStream* ss;
ss = new TStringStream(" ");
ms = new TMemoryStream;
try{

ms->WriteComponent(Component);
ms->Position = 0;
ObjectBinaryToText(ms, ss);
ss->Position = 0;
return ss->DataString;
}
__finally
{
delete ms;
delete ss;
}
return ss->DataString;
}
void StringToComponent(TComponent* Component,const AnsiString& Value)
{

TStringStream* ss;
TMemoryStream* ms;

ss = new TStringStream(Value);
try
{
ms = new TMemoryStream;
try
{
ObjectTextToBinary(ss, ms);
ms->Position = 0;
ms->ReadComponent(Component);
}
__finally
{
delete ms;
}
}
__finally
{
delete ss;
}
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMemo* M = new TMemo(this);
M->Parent = this; //Must Have

M->Top = 12;
M->Left =24;
M->Lines->Add(Now());
M->Lines->Add(Now());
M->Lines->Add(Now());

Memo1->Text = ComponentToString(M);
delete M;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{

TMemo *M = new TMemo(this);
M->Parent = this; //Must Have

StringToComponent(M,Memo1->Text);
}
  • 打赏
  • 举报
回复
贴主不见了...:(
shally5 2002-08-04
  • 打赏
  • 举报
回复
是不是有0啊!Memo是不能重读char为0的字符的也就是说字符的十六进制等于0的字符是读不出来的。
  • 打赏
  • 举报
回复
mark
creativitysoft 2002-08-03
  • 打赏
  • 举报
回复
你的文件保存成功没!
kingcaiyao 2002-08-03
  • 打赏
  • 举报
回复
你不如这样:
用Ini文件保存它的文本和控件在窗体上的位置
用.dat保存控件资源。
Sephil 2002-08-03
  • 打赏
  • 举报
回复
试试 TReader 和 TWriter
具体看帮助,我自己也不是很熟悉的
caomeng2002 2002-06-12
  • 打赏
  • 举报
回复
是动态生成的TMemO控件
请看原码:
....................
.................
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TMetaClass *cl[5]={__classid(TCustomMemo),__classid(TEdit),__classid(TMemo),__classid(TButton),__classid(TWaibuyu)};
RegisterClasses(cl,4);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::abc(int x,int y,int n)
{
if(n==0)
{ TMemo *memo=new TMemo(this);
memo->Parent=Form1;
memo->Left=x;
memo->Top=y;
memo->Text=""; }
else if(n==1){ TWaibuyu *memoA=new TWaibuyu(this);
memoA->Parent=Form1;
memoA->Left=x;
memoA->Top=y;
memoA->Caption="DDDDDDDDD";
} else {
TEdit *memoAq=new TEdit(this);
memoAq->Parent=Form1;
memoAq->Left=x;
memoAq->Top=y;
}

}
//------------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(RadioButton1->Checked==true)
abc(X,Y,0);
else if(RadioButton2->Checked==true)
abc(X,Y,1);
else if(RadioButton4->Checked==true)
abc(X,Y,2);
}
//---------------------------------------------------------------------------


void __fastcall TForm1::save1Click(TObject *Sender)
{
TFileStream *com;
if(SaveDialog1->Execute())
com=new TFileStream(SaveDialog1->FileName,
fmCreate );
try {
for(int i=0;i<ControlCount;i++)
{

if(Controls[i]!=Panel1)
com->WriteComponentRes(SaveDialog1->FileName,Controls[i]);
}
}catch(...)
{ com->Free(); }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::open1Click(TObject *Sender)
{
TFileStream *com;
TComponent *newcom;
if(OpenDialog1->Execute())
com=new TFileStream(OpenDialog1->FileName,
fmOpenRead);
try {
while(com->Position< com->Size)
{
newcom=com->ReadComponentRes(NULL);
InsertControl((TControl*)newcom);
//Counter++ ;
}
}catch(...)
{ com->Free(); }
}
...................................
我不懂电脑 2002-06-12
  • 打赏
  • 举报
回复
TMemo1->Lines->SaveToStream(abc);
caomeng2002 2002-06-12
  • 打赏
  • 举报
回复
别拉着我,,别拉着我,别拉着我 ---------让我跳下去,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(嘿嘿,没人拉着你)
caomeng2002 2002-06-12
  • 打赏
  • 举报
回复
没有一个人和我说话,活者真没意思死了算了:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~死了。
caomeng2002 2002-06-12
  • 打赏
  • 举报
回复
因为我的TMEMO是动态生成的有很多,在生成流时(MEMO上有文字)已经把文字保存了,只是读回来时出错,没有文字时就可以。
ai0ai 2002-06-12
  • 打赏
  • 举报
回复
对啊,保存到文件里,再运行的时候读出来就可以了。
jerry921 2002-06-12
  • 打赏
  • 举报
回复
为什么不把你的文字存到文件里去呢?
可以这样:
TMemo1->Lines->SaveToFile("abc.txt");

TMemo1->Lines->LoadFromFile("abc.txt");
caomeng2002 2002-06-12
  • 打赏
  • 举报
回复
连个人影都没有。看来这还成了难题了。

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧