Procedure / optionale Parameter / Default-Wert mit Funktion?
Procedure / optionale Parameter / Default-Wert mit Funktion?
Ich möchte in einer Prozedur optionale Parameter verwenden.
Konkret geht es um Farben.
Bsp:
Procedure Test(col.i=16448250)
Debug col
EndProcedure
16448250 ist das Ergebnis von RGB(250,250,250)
Das könnte ich natürlich als Zahl verwenden, aber ich fände es lesbarer, wenn ich RGB(250,250,250) schreiben dürfte, nämlich so :
Procedure Test(col.i=RGB(250,250,250))
Debug col
EndProcedure
Geht aber nicht (Syntax Error).
Lässt sich das irgendwie bewerkstelligen?
Konkret geht es um Farben.
Bsp:
Procedure Test(col.i=16448250)
Debug col
EndProcedure
16448250 ist das Ergebnis von RGB(250,250,250)
Das könnte ich natürlich als Zahl verwenden, aber ich fände es lesbarer, wenn ich RGB(250,250,250) schreiben dürfte, nämlich so :
Procedure Test(col.i=RGB(250,250,250))
Debug col
EndProcedure
Geht aber nicht (Syntax Error).
Lässt sich das irgendwie bewerkstelligen?
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Hallo losgehts
Kommt natürlich darauf an, was du schlussendlich mit dem RGB-Value anstellen willst.
Eine Lösung wäre z.B., dass du statt einem Wert die drei Farbwerte separat übergibst:
Viele Grüsse
Pfnuesu
Kommt natürlich darauf an, was du schlussendlich mit dem RGB-Value anstellen willst.
Eine Lösung wäre z.B., dass du statt einem Wert die drei Farbwerte separat übergibst:
Code: Alles auswählen
Procedure.l Test(R.i,G.i,B.i)
ProcedureReturn RGB(R,G,B)
EndProcedure
Debug Test(250,250,250)
Pfnuesu
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Danke Dir.
Ich meine nur die Schreibweise von optionalen Parametern. Ein Literal (oben im Beispiel 16448250) kann man ja als Defaultwert für den optionalen Parameter nehmen, einen Funktionsaufruf (oben im Beispiel RGB(250,250,250)) aber nicht, obwohl der Wert aus Sicht des Compilers ja auch konstant sein sollte.
Vielleicht gibts ja eine Compileroption, die solche Werte vorweg auflöst? Oder irgendwas anderes?
Ich meine nur die Schreibweise von optionalen Parametern. Ein Literal (oben im Beispiel 16448250) kann man ja als Defaultwert für den optionalen Parameter nehmen, einen Funktionsaufruf (oben im Beispiel RGB(250,250,250)) aber nicht, obwohl der Wert aus Sicht des Compilers ja auch konstant sein sollte.
Vielleicht gibts ja eine Compileroption, die solche Werte vorweg auflöst? Oder irgendwas anderes?
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Du könntest ein Macro verwenden:
Code: Alles auswählen
Macro MRGB(R,G,B)
(B * 65536 + G * 256 + R)
EndMacro
Procedure Test(col.i=MRGB(250,250,250))
Debug col
EndProcedure
Test()
Test(16448250)
Test(RGB(250,250,250))
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Sowas suchte ich, vielen Dank!
Klappt auch im Modul bei einer Prozedur, die im DeclareModule erwähnt wird, wenn ich das Macro ebenfalls im DeclareModule bringe.
Schön
Klappt auch im Modul bei einer Prozedur, die im DeclareModule erwähnt wird, wenn ich das Macro ebenfalls im DeclareModule bringe.
Schön

- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Das funktioniert so nicht. RGB() ist kein Macro, sondern eine echte Funktion einer LIbrary im Hintergrund. Der Compiler kann diese nicht während des Kompilierens auflösen. Deswegen funktioniert sie nicht als optionaler Parameter.losgehts hat geschrieben: 05.03.2023 12:33Ich meine nur die Schreibweise von optionalen Parametern. Ein Literal (oben im Beispiel 16448250) kann man ja als Defaultwert für den optionalen Parameter nehmen, einen Funktionsaufruf (oben im Beispiel RGB(250,250,250)) aber nicht, obwohl der Wert aus Sicht des Compilers ja auch konstant sein sollte.
Mein Vorschlag wäre deswegen auch ein Macro wie es DePe ebenfalls vorgeschlagen hat, allerdings würde ich es sicherheitshalber anders schreiben, nämlich so:
Code: Alles auswählen
Macro RGB_(r, g, b)
(((r) & $FF) | (((g) & $ff) << 8) | (((b) & $ff) << 16))
EndMacro
Auf der anderen Seite ist mir aber auch gerade aufgefallen, dass das original RGB() ebenfalls voraussetzt, dass sich die einzelnen Farbwerte im Bereiche 0..255 befinden müssen.
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Danke, Deins ist sogar ca 5% schneller.
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Das kann eigentlich nicht schneller sein, da es ein Macro ist und schon zur Compile-Zeit übersetzt wird. Außer natürlich du nutzt es nicht wie in deinem ersten Post mit konstanten Werten.
Re: Procedure / optionale Parameter / Default-Wert mit Funktion?
Habe nicht das Makro gemessen, sondern Deine Formel gegen RGB().
Hat mich nur nebenbei interessiert.
Hat mich nur nebenbei interessiert.