मैं डेल्फी सहायता फ़ाइल में घटक टॉस्ट्रिंग अनुभाग में उदाहरण का उपयोग करके किसी ऑब्जेक्ट (टीकंपोनेंट वंश) को क्रमबद्ध और deserializing कर रहा हूँ। ऐसा इसलिए है कि मैं ऑब्जेक्ट को डेटाबेस में VARCHAR फ़ील्ड में संग्रहीत कर सकता हूं।क्या मैं एक कन्स्ट्रक्टर बना सकता हूं जो मेरी ऑब्जेक्ट के एक स्ट्रिंग संस्करण को deserializes?
जब मुझे डेटाबेस में संग्रहीत स्ट्रिंग से मेरी कक्षा का एक नया उदाहरण तत्काल करने की आवश्यकता है, तो क्या मैं CreateFromString(AOwner: TComponent; AData: String)
फ़ॉर्म के निर्माता का उपयोग कर ऐसा कर सकता हूं? या क्या मुझे एक गैर-वर्ग विधि का उपयोग करना है जो मेरे घटक वर्ग का उदाहरण देता है?
यदि मैं कन्स्ट्रक्टर संस्करण का उपयोग कर सकता हूं, तो मैं कन्स्ट्रक्टर द्वारा बनाए गए "स्वयं" को रीड कॉम्पोनेंट के वापसी मूल्य को कैसे "मैप" कर सकता हूं?
यहाँ मदद फ़ाइल से अक्रमांकन उदाहरण है:
function StringToComponentProc(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result:= BinStream.ReadComponent(nil);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;
क्या यह संभव है कि आपके कार्यान्वयन में एक छोटी सी बग है? मुझे लगता है कि यह 'बनाना (शून्य)' होना चाहिए; विरासत में नहीं मिला (शून्य); '। "विरासत" के साथ आप TLarryComponent द्वारा पेश किए गए किसी भी फ़ील्ड स्टोरेज और गुणों को याद करते हैं। –
आप सही हैं। मैं सोच रहा था कि 'रीड कॉम्पोनेंट' इसका ख्याल रखेगा, लेकिन मुझे एहसास हुआ कि अब ऐसा कोई रास्ता नहीं है। –
अब पूरी तरह से काम कर रहा है और मेरी समस्या का एक सुंदर समाधान प्रदान कर रहा है। –