Da ich grade wieder drüber gestopert bin und meinen alten Post in Google fand... (falls es auch Andere finden)
OnesComplement ist in Delphi nicht nutzbar (auch wenn man es dort implementieren kann).
Es ist eigentlich für den C++Builder gedacht und .NET kennt den Befehl ebenfalls. LogicalNot ist also das "logische not" (Boolean) und OnesComplement das "binäre not" (Integer).
Außerdem gibt es auch noch die undokumentierten True und False.
Für
if MyRecord then
implementiert man somit das
MyRecord.True
, wobei man natürlich auch einen Implicit-Cast nach Boolean verwenden könnte.
Schachsinnig ist, daß der Delphicompiler bei
if not MyRecord then
nicht das
MyRecord.False
oder
not MyRecord.True
benutzt, sondern es zwanghaft nach
MyRecord.LogicalNot.True
übersetzen will, was beim Fehlen des LogicalNot schön knallt.
Delphi-Quellcode:
TRecord = record
class operator OnesComplement(A: TRecord): TRecord;
class operator True(A: TRecord): boolean;
class operator False(A: TRecord): boolean;
end;