Borland C++ Builder (VCL): Farben zum Speichern in Strings umwandeln
Ich muss mich momentan mal wieder mit C++ beschäftigen (Schulprojekt) und war bis vor wenigen Sekunden noch auf der Suche nach einer Möglichkeit, Farbeinstellungen sinnvoll abzuspeichern. Dabei sind mir dank Google ein paar Möglichkeiten über den Weg gelaufen. Diese möchte ich euch hier kurz vorstellen.
Wozu Farben in Strings umwandeln?
Wenn man ein Einstellungsmenü hat, wo man z.B. die Hintergrundfarbe einer Anwendung verändern kann, möchte man diese Einstellungen wahrscheinlich auch irgendwo abspeichern. Benutzt man den Borland C++ Builder mit der VCL, kann man mit Farben ganz einfach unter Verwendung von TColor arbeiten.
Die Umwandlung
Um jetzt eine Farbe in einen String umzuwandeln, benötigt man eigentlich nur eine einzige Funktion: ColorToString(TColor cl). Diese Funktion ist selbsterklärend. Dennoch zeige ich euch hier, wie man sie benutzt:
ShowMessage(ColorToString(clBlack));
Ausgegeben wird hier „clBlack“. Wenn wir statt clBlack einmal clGreen einsetzen, sehen wir, dass wieder „clGreen“ ausgegeben wird. Man kann so also sehr einfach Konfigurationsdateien anlegen, die Farbeinstellungen enthalten.
Und jetzt wieder rückwärts
Selbstverständlich wollen wir das ganze jetzt auch wieder zurückwandeln, sonst hätte es ja keinen Sinn. Der ein oder andere kann sich den Namen der Funktion wahrscheinlich schon denken: StringToColor(AnsiString str)
Anwendung:
TColor farbe = StringToColor("clRed");
Die Variable Farbe enthält nun auch die Farbe Rot. Hätte nicht gedacht, dass das so einfach geht!
Die Zweite Möglichkeit: Der (int)-Cast mit einem TColor
Es ist auch möglich, Zahlen statt Strings zu benutzen. Mir gefällt diese Möglichkeit aber nicht so gut, da man hier nicht sofort erkennt, um was für eine Farbe es sich handelt. Dennoch stelle ich euch diese Form der Umwandlung auch hier vor.
Die Farbe Schwarz hat den Integer-Wert 0. Dieses Code-Beispiel belegt das.
ShowMessage(ColorToString((TColor)0));
„(TColor)0“ ist der relevante Code in diesem Codeauschnitt. Es wird ein Type-Cast zum Typ TColor durchgeführt. Da wir aber keine TColors ausgeben lassen können, müssen wir die Farbe wieder zu einem String machen. Danach können wir sie ausgeben. Und die Ausgabe wird wie erwartet „clBlack“ sein!
Aber auch umgekehrt lässt sich das zeigen:
ShowMessage(IntToStr((int)clBlack));
Als erstes wird der TColor-Wert zu einem int-Wert gecastet. Da ShowMessage() aber einen String erwartet, wandeln wir den Integer jetzt noch mit IntToStr() in einen AnsiString um. Und siehe da: „0“ wird ausgegeben!
[…] gibt hier übrigens einen Artikel zum Speichern von Farben, der die unterschiedlichen Speichermöglichkeiten […]