Is there a smart way to save/restore NotifyEvents and objects?

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Is there a smart way to save/restore NotifyEvents and objects?

Dennis
I have list of objects which contains references to other objects.
I need to save all these objects to harddisk to be restored on a latter day.

I know how to stream the data fields of these objects to a TFileStream
but the tricky part is these how to restore the object references.

The only way I can think of is to assign unique IDs to each objects and
store these IDs to file.
When these objects are later restored, I used these IDs find the actual
objects and re-assign them back to the object references.

It is tedious. Is there a smarter way?

Also, there are some TNotifyEvent fields  e.g. OnClick, OnClose etc.  
How do I save and restore them from file?

Many thanks in advance.

Dennis
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Is there a smart way to save/restore NotifyEvents and objects?

Free Pascal - General mailing list
Am 02.02.2018 17:53 schrieb "Dennis" <[hidden email]>:
I have list of objects which contains references to other objects.
I need to save all these objects to harddisk to be restored on a latter day.

I know how to stream the data fields of these objects to a TFileStream but the tricky part is these how to restore the object references.

The only way I can think of is to assign unique IDs to each objects and store these IDs to file.
When these objects are later restored, I used these IDs find the actual objects and re-assign them back to the object references.

It is tedious. Is there a smarter way?

Also, there are some TNotifyEvent fields  e.g. OnClick, OnClose etc.  How do I save and restore them from file?

Many thanks in advance.

If your objects inherit from TComponent and you use published properties you can use the streaming screen of the RTL. 

Regards,
Sven 

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Is there a smart way to save/restore NotifyEvents and objects?

Dennis Poon


Sven Barth via fpc-pascal wrote:

> Am 02.02.2018 17:53 schrieb "Dennis" <[hidden email]
> <mailto:[hidden email]>>:
>
>     I have list of objects which contains references to other objects.
>     I need to save all these objects to harddisk to be restored on a
>     latter day.
>
>     I know how to stream the data fields of these objects to a
>     TFileStream but the tricky part is these how to restore the object
>     references.
>
>     The only way I can think of is to assign unique IDs to each
>     objects and store these IDs to file.
>     When these objects are later restored, I used these IDs find the
>     actual objects and re-assign them back to the object references.
>
>     It is tedious. Is there a smarter way?
>
>     Also, there are some TNotifyEvent fields  e.g. OnClick, OnClose
>     etc.  How do I save and restore them from file?
>
>     Many thanks in advance.
>
>
> If your objects inherit from TComponent and you use published
> properties you can use the streaming screen of the RTL.
>
I am curious how TComponent save and restore TnotifyEvent fields. Can
you explain a little bit?
Also, what is 'streaming screen' of RTL? How to use it?

Thanks.

Dennis

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Is there a smart way to save/restore NotifyEvents and objects?

Michael Van Canneyt


On Sat, 3 Feb 2018, Dennis Poon wrote:

>>
>>
>> If your objects inherit from TComponent and you use published
>> properties you can use the streaming screen of the RTL.
>>
> I am curious how TComponent save and restore TnotifyEvent fields. Can
> you explain a little bit?

Roughly:

If you put a method in the published section of an object, its name is
written to RTTI. It can be retrieved and set using the RTTi based on the
name: when saving, the name is written to stream, when loading, the name is
looked up in RTTI.

The classes TReader and TWriter in the classes unit perform this work.

> Also, what is 'streaming screen' of RTL? How to use it?

He meant the streaming system, I suppose. TComponent, TReader and TWriter
together form the streaming system.

Michel.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Is there a smart way to save/restore NotifyEvents and objects?

Free Pascal - General mailing list
Am 03.02.2018 09:11 schrieb "Michael Van Canneyt" <[hidden email]>:


On Sat, 3 Feb 2018, Dennis Poon wrote:



If your objects inherit from TComponent and you use published properties you can use the streaming screen of the RTL.

I am curious how TComponent save and restore TnotifyEvent fields. Can you explain a little bit?

Roughly:

If you put a method in the published section of an object, its name is
written to RTTI. It can be retrieved and set using the RTTi based on the
name: when saving, the name is written to stream, when loading, the name is
looked up in RTTI.

The classes TReader and TWriter in the classes unit perform this work.

Of course this only works for methods that are published. 



Also, what is 'streaming screen' of RTL? How to use it?

He meant the streaming system, I suppose. TComponent, TReader and TWriter
together form the streaming system.

Correct. Stupid autocorrection -.-

Regards, 
Sven 

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Is there a smart way to save/restore NotifyEvents and objects?

Michael Van Canneyt


On Sat, 3 Feb 2018, Sven Barth via fpc-pascal wrote:

> Am 03.02.2018 09:11 schrieb "Michael Van Canneyt" <[hidden email]>:
>
>
>
> On Sat, 3 Feb 2018, Dennis Poon wrote:
>
>
>>>
>>> If your objects inherit from TComponent and you use published properties
>>> you can use the streaming screen of the RTL.
>>>
>>> I am curious how TComponent save and restore TnotifyEvent fields. Can you
>> explain a little bit?
>>
>
> Roughly:
>
> If you put a method in the published section of an object, its name is
> written to RTTI. It can be retrieved and set using the RTTi based on the
> name: when saving, the name is written to stream, when loading, the name is
> looked up in RTTI.
>
> The classes TReader and TWriter in the classes unit perform this work.
>
>
> Of course this only works for methods that are published.

Absolutely, that is why it was the first sentence of my reply :)

> Also, what is 'streaming screen' of RTL? How to use it?
>>
>
> He meant the streaming system, I suppose. TComponent, TReader and TWriter
> together form the streaming system.
>
>
> Correct. Stupid autocorrection -.-

Don't you hate it when computers think they're smarter than you ? ;-)

Michael.
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Is there a smart way to save/restore NotifyEvents and objects?

Free Pascal - General mailing list
Am 03.02.2018 10:08 schrieb "Michael Van Canneyt" <[hidden email]>:


On Sat, 3 Feb 2018, Sven Barth via fpc-pascal wrote:

Am 03.02.2018 09:11 schrieb "Michael Van Canneyt" <[hidden email]>:



On Sat, 3 Feb 2018, Dennis Poon wrote:



If your objects inherit from TComponent and you use published properties
you can use the streaming screen of the RTL.

I am curious how TComponent save and restore TnotifyEvent fields. Can you
explain a little bit?


Roughly:

If you put a method in the published section of an object, its name is
written to RTTI. It can be retrieved and set using the RTTi based on the
name: when saving, the name is written to stream, when loading, the name is
looked up in RTTI.

The classes TReader and TWriter in the classes unit perform this work.


Of course this only works for methods that are published.

Absolutely, that is why it was the first sentence of my reply :)

Ah right, sorry. It was still before breakfast when I answered that. ^^'



Also, what is 'streaming screen' of RTL? How to use it?


He meant the streaming system, I suppose. TComponent, TReader and TWriter
together form the streaming system.


Correct. Stupid autocorrection -.-

Don't you hate it when computers think they're smarter than you ? ;-)

Definitely :P

Regards, 
Sven 


_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal