Das:
Delphi-Quellcode:
procedure Toggle (const B : Boolean);
var BPtr : PBoolean;
begin
BPtr := @B;
BPtr^ := not B;
end;
kann garnicht funktionieren, da die Direktive 'const' CallByValue (Worth) bewirkt (also genauso wie ohne Direktive, ausser, dass der Wert des Aufrufparameters zusätzlich nicht änderbar ist). Dies hat zur Folge, dass der Wert der Eigenschaft Checked als Kopie übergeben wird und diese kannst Du mit diesem Trick natürlich ändern, das hat aber keinerlei Einfluss auf das Original.
Dass man Properties nicht als Varparameter übergeben kann hat einen anderen Grund: Hier wird CallByReference (Wirth) zelebriert, also eigentlich wird intern nur ein Zeiger auf den Speicherbereich des Übergabeparameters übergeben. Das ist das, was die C-ler umständlich mit Pointern lösen müssen. Da eine Property aber nicht in dem Sinne eine 'Speicherzelle' wie eine 'normale' variable ist, kann man keinen Zeiger darauf übergeben. Das gleiche gilt auch für die Direktive 'out'.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>