Ehct ksras!
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"...
Raus kommt in jedem Fall und in jeder Situation "16.777.215"...
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Ich dachte, du weißt das? Aber naja, der Fred, ist das nicht der oberste Boss von PB? Wie kann ich den denn erreichen?
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
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!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.

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.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
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.
Bei einem Ausdruck wie RGB(red.l, green.l,



ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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...
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
Code: Alles auswählen
r + $100 * g + $10000 * b
....wer es für konstante werte benutzt is eh selber schulz, schließlich kann man farben doch als HEX-werte einfach hinschreiben...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
> 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!
> 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!

PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22