Einzelnen Beitrag anzeigen

Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#12

Re: Gibt es einen Toggle Befehl ?

  Alt 6. Mär 2007, 11:59
Zitat von Amateurprofi:
So mal eben funktioniert das aber nicht.
[Fehler] E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
Hallo,

stimmt, beim Aufruf mit einer CheckBox - aber das finde ich eine Inkonsistenz der Borländer: wenn ich einer Boolschen Variablen einen Wert zuweisen kann, dann kann sie nicht im Ernst konstant sein. Das ist der gleiche Unsinn wie mit den typisierten Konstanten, die in Wirklichkeit initialisierte Variable sind. Der Umgang von Borland mit dem Begriff "const" hat nach meinem Gefühl schon Hackerniveau, so etwas gibt es meines Wissens in anderen Sprachen nicht.

Der wahre Grund für den Fehler ist, dass der Compiler statt der einfachen Zuweisung die Methode SetChecked einbauen muss, dazu muss er wissen, dass Checked eine Property von TCheckBox ist, und das ist zur Compiletime eben nicht bekannt. Daher hat sich Borland wohl den Trick mit dem unechten Const einfallen lassen. Die Tatsache, dass Checked eine Property ist und keine einfache Variable, wirkt sich aber auch in anderen Fällen aus, dann aber ohne Fehlermeldung:

Delphi-Quellcode:
procedure Toggle (const B : Boolean);
var BPtr : PBoolean;
begin
BPtr := @B;
BPtr^ := not B;
end;
ist korrekt und wird compiliert (auch der Aufruf mit TCheckBox.Checked), funktioniert aber nicht.

Gruss Reinhard
  Mit Zitat antworten Zitat