2011-06-07 15 views
6

Tenemos una aplicación que almacena información del proyecto en un archivo al descender de TPersistent. Usamos TSteam.ReadComponentRes para leer de una secuencia al objeto.Ignorar propiedades desconocidas al leer el objeto de la secuencia

Nos gustaría poder abrir archivos de proyecto con propiedades desconocidas (de versiones más recientes u otras ramas de desarrollo de nuestra aplicación). Actualmente esto da como resultado una excepción en TReader, que es creado por TStream. Hemos considerado crear un descendiente de TStream que use un descendiente TReader que maneje esta excepción en lugar de detener la lectura. ¿Alguien puede pensar en una forma más elegante de hacer esto?

+0

Sí - Me gustaría saber cómo hacer esto también. El TReader exceptúa y no sé cómo 'reanudarlo'. Esto ha causado problemas en mi clase 'TpersistentForm' que transmite todas las propiedades publicadas a un archivo en destroy y las transmite de nuevo en create. Como dices, hay grandes problemas durante el desarrollo en los que agrego/elimino controles de las formas :(He añadido comillas en serie a lo largo de los años para solucionar la mayoría de los problemas, pero nunca he sido totalmente feliz. –

Respuesta

8

Llame a Stream.ReadResHeader, cree una instancia de TReader, establezca su evento OnError y llame a Reader.ReadRootComponent y libere el lector (es decir, imite el comportamiento de TStream.ReadComponentRes).

Dentro del controlador de eventos OnError puede establecer manejado: = verdadero.

+0

¡Genial! ¡Probaré esto! –

+0

De acuerdo, use el evento 'OnError'. Aquí hay un [ejemplo] (http://stackoverflow.com/questions/271843/doublebuffered-property-beeing-added-in-the-dfm-in-delphi- 2009-does-not-exist-in/275156 # 275156) para las propiedades 'DoubleBuffered' y' ParentDoubleBuffered' tanto en tiempo de ejecución como designtime. –

+0

Esto suena genial. Tengo problemas con 'Reader.OnError: = OnReaderError;'. Obtengo un tipo E2009 Incompatible: error de "método puntero y procedimiento regular", sin embargo. ¿Tiene alguna sugerencia? – boileau

Cuestiones relacionadas