Seite 5 von 5
Verfasst: 08.01.2006 17:16
von AND51
Aber warum kann ich das Ergebnis von RGB(255, 255, 255) oder wie ihr das schreibt, RGB($FF, $FF, $FF) nicht einer Konstanten zuweisen?
Raus kommt in jedem Fall und in jeder Situation "16.777.215"...
Verfasst: 08.01.2006 19:48
von MVXA
Frag Fred.
Verfasst: 08.01.2006 21:19
von AND51
Ich dachte, du weißt das? Aber naja, der Fred, ist das nicht der oberste Boss von PB? Wie kann ich den denn erreichen?
Verfasst: 25.03.2007 23:48
von AND51
MVXA hat geschrieben:Richtiger Weg

. PB weiß selbst, dass Chr(0) immer das Zeichen
Null zurück geben würde. Deswegen schreibt PB statt dem Funktions-
aufruf zu Chr gleich das ASCII Zeichen Null da hin. Deswegen klappt
das auch mit der Deklaration in einer Konstante.
Mir fiel grad diese Diskussion wieder ein, und dank
SizeOf() weiß ich nun warum! Wollte das schon lange mal hier hinscheiben, besser spät als nie!
Chr() ist zwar keine
CompilerDirektive arbeitet im Grunde aber ähnlich wie
SizeOf(); ich vermute, dass der Compiler beim kompilieren bestimmte Funktionen wie
SizeOf(),
Chr() oder auch
OffsetOf() direkt umsetzt, aus
Chr(169) wird also direkt vor der Kompilation durch © ersetzt.
Die Frage warum die mathematischen Funktionen wie
Sqr(),
Int() oder aber auch
RGB() nicht funktionieren ist ganz einfach: Diese erzeugen zwar vermeintlich immer den gleichen Output, vollführt intern aber Berechnungen, die nicht konstant sind und somit nicht Konstanten zugewiesen werden können; allein deren Übergabeparameter können Variablen sein, die erst während der Laufzeit des Programms mit Werten gefülllt werden.
Verfasst: 26.03.2007 14:52
von ZeHa
Wenn ich in meinem Code aber RGB(255,0,255) habe, dann sind da bereits nur Konstanten drin, womit es denkbar wäre, den Compiler dieses Konstrukt direkt in 0xFF00FF übersetzen zu lassen.
Bei einem Ausdruck wie RGB(red.l, green.l,

wäre Deine Argumentation jedoch richtig, denn red und green kann sich jederzeit ändern.
Verfasst: 26.03.2007 15:29
von Kaeru Gaman
die problematik ist aber, dass RGB(r,g,b) wirklich eine funktion ist,
Chr() jedoch nicht, da dort keine inhaltliche veränderung stattfindet,
sondern nur ein anderer Typ interpretiert wird.
insofern könnte man sagen daß Chr() für den kompiler garnicht existiert,
und wenn es einen konstanten ausdruck enthält genauso im einen compilerpass
ersetzt werden kann wie jeder andere konstante ausdruck auch,
und somit auch zur compilezeit zur verfügung steht.
mit RGB könnte man das auch implementieren, weil es ja nichts weiter bedeutet als
aber RGB() wird halt als laufzeit-funktion angesehen.
....wer es für konstante werte benutzt is eh selber schulz, schließlich kann man farben doch als HEX-werte einfach hinschreiben...
Verfasst: 26.03.2007 15:35
von AND51
> die problematik ist aber, dass RGB(r,g,b) wirklich eine funktion ist,
> Chr() jedoch nicht, da dort keine inhaltliche veränderung stattfindet
Wieso schreib ich eigentlich Romane, wenn ich es auch so zusammenfassen könnte
Du nimmst mir die Worte aus dem Mund, Kaeru!

Verfasst: 27.03.2007 16:38
von MVXA
RGB() sollte aber halt auch keinen Konstanten Wert zurück geben sondern
müsste eigentlich intern je nach Farbtiefe umrechnen.
Verfasst: 27.03.2007 16:43
von Kaeru Gaman
stimmt.....
das dürfte sogar der grund sein, warum es selbst mit konstantem wert nicht zur kompilezeit ausgeführt werden kann....