ComponentToString (C++)
Description
This example shows how to use the built-in component streaming support to convert any component into a string and convert that string back into a component.
Code
#include <memory> //For STL auto_ptr class
class MyScrollBar : public TScrollBar
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall MyScrollBar(TComponent* Owner);
};
__fastcall MyScrollBar::MyScrollBar(TComponent* Owner)
: TScrollBar(Owner)
{
}
void RegisterClassesWithStreamingSystem(void)
{
// Make sure that, as part of the startup
// code, the streaming classes are registered
// with the streaming system.
#pragma startup RegisterClassesWithStreamingSystem
Classes::RegisterClass(__classid(MyScrollBar));
}
MyScrollBar *ScrollBar1;
String __fastcall ComponentToString(TComponent *c)
{
String as;
std::auto_ptr<TMemoryStream> pms(new TMemoryStream);
std::auto_ptr<TStringStream> pss(new TStringStream(as));
try
{
pms->WriteComponent(c);
pms->Seek(0, soFromBeginning);
ObjectBinaryToText(pms.get(), pss.get());
pss->Seek(0, soFromBeginning);
as = pss->DataString;
}
catch(...)
{
ShowMessage("Streaming error.");
}
return as;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Text = ComponentToString(ScrollBar1);
}
TComponent *__fastcall StringToComponent(String as)
{
std::auto_ptr<TMemoryStream> pms(new TMemoryStream);
std::auto_ptr<TStringStream> pss(new TStringStream(as));
TComponent *pc;
try
{
ObjectTextToBinary(pss.get(), pms.get());
pms->Seek(0, soFromBeginning);
}
catch(...)
{
ShowMessage("Streaming error.");
}
pc = pms->ReadComponent(NULL);
return pc;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TComponent *temp = StringToComponent(Memo1->Text);
ScrollBar1->Free();
ScrollBar1 = dynamic_cast<MyScrollBar *>(temp);
ScrollBar1->Parent = Form1;
ScrollBar1->Visible = TRUE;
}
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ScrollBar1 = new MyScrollBar(Form1); // Form1 will clean up the scroll bar.
ScrollBar1->Parent = Form1;
ScrollBar1->Visible = TRUE;
ScrollBar1->Top = 48;
ScrollBar1->Left = 250;
ScrollBar1->Name = "Ricksbar";
}
Uses
- System.Classes.TStream.ReadComponent ( fr | de | ja )
- System.Classes.TStream.WriteComponent ( fr | de | ja )
- System.Classes.TStringStream.DataString ( fr | de | ja )
- System.Classes.ObjectBinaryToText ( fr | de | ja )
- System.Classes.ObjectTextToBinary ( fr | de | ja )
- System.Classes.TCustomMemoryStream.Seek ( fr | de | ja )
- System.Classes.TStringStream.Create ( fr | de | ja )
- System.Classes.TMemoryStream ( fr | de | ja )
- System.Classes.TStringStream ( fr | de | ja )
- System.Classes.TStream ( fr | de | ja )
- System.Classes.RegisterClass ( fr | de | ja )