Bạn không thể dựa vào một constructor vì, trái với Lớp học, hồ sơ không cần phải sử dụng chúng, các nhà xây dựng parameterless mặc định được sử dụng ngầm.
Nhưng bạn có thể sử dụng một lĩnh vực liên tục:
type
TPacket = record
type
TBytish = 0..250;
const
InitByte : Byte = 255;
var
FirstVal,
SecondVal: TBytish;
end;
Sau đó sử dụng điều này như một thường xuyên ghi, ngoại trừ việc bạn không có (và bạn không thể) thay đổi lĩnh vực InitByte
.
FillChar
duy trì trường liên tục và hoạt động như mong đợi.
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;
Cập nhật để bao gồm các phạm vi loại lồng nhau 0..250
Nguồn
2012-03-15 21:07:24
Bạn có thể dùng đến subrange loại – OnTheFly
Nếu tất cả các bạn đang làm là giá trị BYTE trong một TPacket, tôi thay vào đó sẽ sử dụng RawByteString và chỉ xác định hằng số có tên InitByte = 0, FIrstVal = 1, v.v. Tôi sẽ đảm bảo rằng giá trị ban đầu là giá trị hằng số chính xác bằng cách thực hiện nó trong CODE trong hàm PacketBuild của tôi. –
Bạn sẽ sử dụng phiên bản Delphi nào? – kobik