Das Casten der TSignature war ja nur, weil ich es in einem Byte gespeichert hab.
Im Record kannst da den richtigen Typ benutzen.
Bei DatenRecords erstelle ich mir gern einen/mehrere Constuctor, um sie
direkt einzeilig füllen zu können, auch direkt an Varioable/Property/Parameter übergebbar.
Quasi
TRect.Create anstatt einer externen Funktion ala
Rect, bzw.
TPoint.Create und
Point.
Schön wäre bestimmt es, wenn Emba hier den Constructor implitit für Casts benutzen würde, also TSignature(...)
alternativ zu TSignature.Create(...)
.
Delphi-Quellcode:
TSignature =
packed record
Format: TSignature;
Offset: Integer;
Signature:
array of Byte;
constructor Create(AFormat: TSignature; AOffset: Integer; ASignature:
array of Byte);
end;
TSignatures =
array of TSignature;
function GetSignatureList: TSignatures;
begin
{
Result := nil;
Result := Result + [TSignature.Create(TImageFormat.JPEG, 0, [$FF, $D8, $FF, $DB])];
Result := Result + [TSignature.Create(TImageFormat.JPEG, 0, [$FF, $D8, $FF, $E0, $00, $10, $4A, $46])];
...
}
Result := [
TSignature.Create(TImageFormat.JPEG, 0, [$FF, $D8, $FF, $
DB]),
TSignature.Create(TImageFormat.JPEG, 0, [$FF, $D8, $FF, $E0, $00, $10, $4A, $46]),
...
];
end;
Ja, der Code wird so weniger optimal, aber vom Code her wird es teilweise schöner.
Man könnte noch schauen, ob es mit einem INLINE; besser wird.
Delphi kennt ja seit 'ner Weile string-like Operatoren, wie man sie von Strings kennt, wie z.B. das
+
.