2011-06-07 19 views
6

Bir dosyada TPersistent'ten azalan proje bilgilerini depolayan bir uygulama var. Nesneye bir akıştan okumak için TSteam.ReadComponentRes kullanırız.Akıştan nesne okunurken bilinmeyen özellikleri yok sayma

Bilinmeyen özelliklere sahip proje dosyalarını (başvurumuzun yeni sürümlerinden veya diğer geliştirme bölümlerinden) açabilmek istiyoruz. Şu anda bu, TStream tarafından oluşturulan TReader'da bir istisna ile sonuçlanmaktadır. Okumayı durdurmak yerine bu istisnayı işleyen bir TReader soyundan gelen bir TStream soyundan gelmeyi düşündük. Bunu yapmanın daha şık bir yolu düşünen var mı?

+0

Evet - Bunu nasıl yapacağımı bilmek isterim. TReader hariç ve ben onu nasıl 'devam ettireceğimi bilmiyorum. Bu, 'TpersistentForm' sınıfında, yayınlanmış tüm özellikleri yokedilen bir dosyaya aktaran ve bunları yeniden oluşturma üzerine yeniden akışa sokan sorunlara neden oldu. Söylediğiniz gibi, geliştirme sırasında kontroller ekleyerek/sildiğim büyük problemler var :(Problemlerin çoğunu toplayabilmek için yıllar geçtikçe seri bedenlere ekledim, ama hiç bu kadar mutlu olmadım –

cevap

8

Akış çağırın.ReadResHeader, bir TReader örneği oluşturun, OnError olayını ayarlayın ve Reader.ReadRootComponent öğesini çağırın ve okuyucuyu serbest bırakın (örn. TStream.ReadComponentRes davranışını taklit edin).

OnError olay işleyicisinin içinde ele alınan ayarlayabilirsiniz: = true.

+0

Harika! Bunu deneyeceğim! –

+0

Anlaşıldı, 'OnError' olayını kullan İşte bir [örnek] (http://stackoverflow.com/questions/271843/doublebuffered-property-beeing-added-in-the-dfm-in-delphi- 2009-yok-varolmayan/275156 # 275156) 'DoubleBuffered' ve 'ParentDoubleBuffered' özellikleri hem çalışma zamanında hem de designtime. –

+0

Bu kulağa harika geliyor. 'Reader.OnError: = OnReaderError; 'ile sorun yaşıyorum. E2009 Uyumsuz türleri: 'yöntem işaretçisi ve düzenli yordam' hatası alıyorum. Herhangi bir ipucunuz var mı? – boileau

İlgili konular