Nie można powoływać się na konstruktora, ponieważ, w przeciwieństwie do klas, płyty nie są wymagane do korzystania z nich, konstruktor domyślny bez parametrów wykorzystywane w sposób dorozumiany.
Ale można użyć stałego pola:
type
TPacket = record
type
TBytish = 0..250;
const
InitByte : Byte = 255;
var
FirstVal,
SecondVal: TBytish;
end;
Wtedy to wykorzystać jako zwykły Record, oprócz tego, że nie ma (i nie może) zmienić pole InitByte
.
FillChar
zachowuje stałe pole i zachowuje się zgodnie z oczekiwaniami.
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;
Updated zawierać zagnieżdżony zakres typu 0..250
mógł odwołać się do podzakresu Rodzaje – OnTheFly
Jeśli wszystko robisz jest bajt o wartości TPacket, chciałbym zamiast używać RawByteString i po prostu zdefiniować stałe nazwanych InitByte = 0, FIrstVal = 1 i tak dalej. AND Zapewniam, że wartość początkowa była poprawną wartością stałą, wykonując ją w CODE w mojej funkcji PacketBuild. –
Jakiej wersji Delphi użyjesz? – kobik