![]() |
Farben in DB speichern & bei Programmlauf wieder einlese
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphianer,
ich habe ein Problem mit Farben. Ich will dem Prog-User die Möglichkeit geben, bestimmte Farben (akt. Schichtplan) selbst auszuwählen. Das Auswählen mit ColorDialog1.Color, das Zuweisen mit Panel1.Color := ColorDialog1.Color und das Speichern mit ColorToString(Panel1.Color) funktioniert. Diese Strings sollen in die DB gespeichert werden und beim nächsten Programmlauf dann ausgelesen werden. Soweit - so gut. Wenn dann beim nächsten Programmlauf mit Label1.Caption := TestIni.ReadString('Colors', '1', 'clWhite') die Farbe eingelesen wird ist das Ergebnis alles, nur nicht die gespeicherte Farbe. Zum Testen werden die Werte in eine INI gespeichert. Ich bin sicher, das auf diesem Weg eine Wert-Veränderung gemacht wird, von der ich nichts mitbekomme. :?: Hat jemand eine Idee, wo der Fehler liegt (außer bei mir) ? Vielen Dank im Vorraus. (Test-Projekt befindet sich im Anhang) |
Re: Farben in DB speichern & bei Programmlauf wieder ein
Hallo und Willkommen in der DP :dp:,
ich würde die Farben nicht als Strings, sondern als Integers abspeichern (intern ist das ja auch nichts anderes). |
Re: Farben in DB speichern & bei Programmlauf wieder ein
Nach der testphase wùrde ich das auch als smallint speichern.Fùr Testzwecke spricht aber nichts gegen clRed + Co als strings
|
Re: Farben in DB speichern & bei Programmlauf wieder ein
Hallo,
der Fehler liegt in der Zuweisung der Farbe im FormShow-Ereignis: benutze : Panel1.Color := StringToColor(Color1); und die Sache funktioniert |
Re: Farben in DB speichern & bei Programmlauf wieder ein
Zitat:
TColor = Integer; Farben als Zahlenwerte zu speichern ist genau der richtige Weg. Das gilt sogar für die Systemfarben die letztlich Windows vorgibt. Dabei wird das höchstwertigste Byte benutzt um diese als Systemfarben zu identifizieren, d.h. das wird gleich automatisch mit gespeichert. |
Re: Farben in DB speichern & bei Programmlauf wieder ein
Aber imho nicht zum testen.Ich wùrde notfalls strings in kauf nehmen und später die DB richtig zusammenbauen
|
Re: Farben in DB speichern & bei Programmlauf wieder ein
ALternative:
wenn nicht viele Farben benötigt werden, können diese auch in einem Array gespeichert und abgerufen werden. bsp.:
Delphi-Quellcode:
aufgerufen mit:
const
PanelColor : array[1...10] of Color = (Farbe1, Farbe2, ... Farbe10);
Delphi-Quellcode:
dies hätte auch noch den Vorteil, dass nur vordefinierte Farben benutzt werden können.
Panel1.Color := PanelColor[i];// i : Integer (1...10)
In einem weiteren Array vom Typ String kann dann zu jeder Farbe die Verwendung gespeichert werden [edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit] |
Re: Farben in DB speichern & bei Programmlauf wieder ein
Zitat:
|
Re: Farben in DB speichern & bei Programmlauf wieder ein
Hallo Freunde,
es ist gelungen !
Delphi-Quellcode:
:dancer:
var
Form1: TForm1; FarbeInt : LongInt; const TIniFileName = 'Test.Ini'; clNew = TColor($00FF80); //farbe := StrToInt('$' + IntToHex(blau, 2) + IntToHex(gruen, 2) + IntToHex(rot, 2)); //Diesen Codeschnipsel fand ich in einem anderen Beitrag // implementation {$R *.DFM} procedure TForm1.Color1ChangeClick(Sender: TObject); begin // welche Farbe hätten's denn gern ? ColorDialog1.Execute; // diese Farbe ist gewählt Panel1.Color := ColorDialog1.Color; // diesen Wert hat die Farbe Panel1.Caption := ColorToString(Panel1.Color); // das ist der Integer-Wert FarbeInt := ColorToRgb(Panel1.Color); // Anzeige als Integer Label2.Caption := IntToStr(FarbeInt); // Anzeige als Hex Label3.Caption := IntToHex(FarbeInt, 8); end; procedure TForm1.Color1SaveClick(Sender: TObject); var TestIni : TIniFile; begin TestIni := TIniFile.Create(TIniFileName); with TestIni do begin // save'n als String (in Hex) TestIni.WriteString('Colors', '4', IntToHex(FarbeInt, 8)); end; TestIni.Free; end; procedure TForm1.FormShow(Sender: TObject); var TestIni : TIniFile; Color1 : string; begin TestIni := TIniFile.Create(TIniFileName); with TestIni do begin // zurück holen, als Hex aufbereiten und an Delphi übergeben Panel4.Color := StrToInt('$' + TestIni.ReadString('Colors', '4', '00AA0033')); end; TestIni.Free; end; Der Knackpunkt ist die Aufbereitung ! Da fehlte mir das Verständnis, zu dem, was ich in Delphi sah und das, was es eigentlich ist. Nochmals Danke für alle Anregungen und Hilfen sowie den freundlichen Empfang !!! :hi: [edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit] |
Re: Farben in DB speichern & bei Programmlauf wieder ein
Naja, das ist ja nicht "direkt" eine Datenbank ;). Aber nichtsdestotrotz ist die Aufbereitung eigentlich gar nicht nötig. Eine TColor entspricht intern einer Integer, was bedeutet, dass man sie als Integer abspeichern und auch wieder laden kann, ohne etwas konvertieren/aufbereiten zu müssen.
[edit] Achja, bitte schließe doch Quellcode künftig in Delphi-Tags ein (entweder über die Schaltfläche über dem Eingabefenster oder manuell über
Delphi-Quellcode:
), dann ist er besser zu lesen und die Formatierung/Einrückung bleibt auch erhalten ;) [/edit]
Code
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz