Ehct ksras!

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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"...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Frag Fred.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

MVXA hat geschrieben:Richtiger Weg :wink:. 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! :lol:

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
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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, 8) wäre Deine Argumentation jedoch richtig, denn red und green kann sich jederzeit ändern.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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

Code: Alles auswählen

r + $100 * g + $10000 * b
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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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 :lol:

Du nimmst mir die Worte aus dem Mund, Kaeru! :wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

RGB() sollte aber halt auch keinen Konstanten Wert zurück geben sondern
müsste eigentlich intern je nach Farbtiefe umrechnen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

stimmt.....

das dürfte sogar der grund sein, warum es selbst mit konstantem wert nicht zur kompilezeit ausgeführt werden kann....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten