Max gibt es nicht als Unsigned (Cardinal/LongWord).
Es wird also nicht das Max mit Integer sondern mit Int64 genommen, weil UInt32 nicht in Int32 rein passt. (Bits ja, aber nicht vom Wertebereich)
Und das Int64-Result vom Max passt dann nicht mehr komplett ins
CardinalVariable :=
rein, also kommt die Meldung. (obwohl es von den verwendeten, bzw. logisch möglichen Werten schon passen würde)
Lösung: ein expliziter Cast
:= Cardinal(Max(...))
Und Nein, VAL gibt es ebenfalls nicht "explizit" für Cardinal.
Zitat von
Auszug aus der System.pas:
Delphi-Quellcode:
function _ValLong(const S: string; var Code: Integer): Integer;
function _ValExt(s: string; var code: Integer): Extended;
function _ValInt64(const S: string; var Code: Integer): Int64;
function _ValUInt64(const s: string; var code: Integer): UInt64;
Wertest du auch "code" aus?
Wenn nicht, warum verwendest du dann diese "uralten" Pascalfuktionen, anstatt
TryStrToInt/TryStrToInt64 bzw.
StrToIntDef
oder die neuen Helper ala
TCardinalHelper.Parse? (
newCardinalValue := Cardinal.Parse('932');
)
Im
TStringHelper gibt es zwar auch nur ToInt64 (für Cardinal), also dort ebenfalls mit Cast
C := Cardinal('932'.ToInt64);
, wie beim StrToInt64.