आप एक निर्माता पर भरोसा नहीं कर सकते, क्योंकि कक्षा के विपरीत, रिकॉर्ड्स उन्हें इस्तेमाल करने की आवश्यकता नहीं है, डिफ़ॉल्ट parameterless निर्माता परोक्ष इस्तेमाल किया जा रहा।
लेकिन आप एक निरंतर क्षेत्र का उपयोग कर सकते हैं:
type
TPacket = record
type
TBytish = 0..250;
const
InitByte : Byte = 255;
var
FirstVal,
SecondVal: TBytish;
end;
फिर इस एक नियमित रूप से रिकॉर्ड के रूप में, को छोड़कर आप की जरूरत नहीं है कि (और आप नहीं कर सकते हैं) का उपयोग InitByte
फ़ील्ड बदलें।
FillChar
निरंतर क्षेत्र को संरक्षित करता है और अपेक्षित व्यवहार करता है।
procedure TForm2.FormCreate(Sender: TObject);
var
r: TPacket;
begin
FillChar(r, SizeOf(r), #0);
ShowMessage(Format('InitByte = %d, FirstVal = %d, SecondVal = %d', [r.InitByte, r.FirstVal,r.SecondVal]));
// r.InitByte := 42; // not allowed by compiler
// r.FirstVal := 251; // not allowed by compiler
r.FirstVal := 1;
r.SecondVal := 2;
ShowMessage(Format('InitByte = %d, FirstVal = %d, SecondVal = %d', [r.InitByte, r.FirstVal,r.SecondVal]));
end;
अपडेट किया गया नेस्टेड प्रकार रेंज 0..250
स्रोत
2012-03-15 21:07:24
आप प्रकार – OnTheFly
subrange को यदि सब आप कर रहे हैं एक TPacket में बाइट मूल्यों है सहारा सकता है शामिल करने के लिए, मैं बजाय RawByteString का प्रयोग करेंगे और सिर्फ नामित स्थिरांक को परिभाषित InitByte = 0, FIrstVal = 1, और इसी तरह। एएनडी मैं यह सुनिश्चित करता हूं कि शुरुआती मूल्य मेरे पैकेटबिल्ड फ़ंक्शन में कोड में कर कर सही निरंतर मूल्य था। –
आप किस डेल्फी संस्करण का उपयोग करेंगे? – kobik