![]() |
Farbe speichern und wiedergeben
Hallo
ich möchte mit meinem TButtonColor, die ausgewählte farbe speichern und beim neuladen soll die ausgewählte farbe erscheinen. jedoch klappt das laden nicht.
Delphi-Quellcode:
procedure SaveColorSettings();
const IniName = 'C:\Users\Color.ini'; var Ini: TIniFile; Color, i: Integer; begin Ini := TIniFile.Create(IniName); try Ini.WriteInteger('Farben', ' i ', frmKonfig.Color); finally Ini.Free; end; end; procedure LoadColorSettings(); const IniName = 'C:\Users\Color.ini'; var Ini: TIniFile; i: integer; Color : Integer; Begin Ini := TIniFile.Create(IniName); try //frmKonfig.Color := StrToInt(Ini.ReadString('Farben', 'i', frmKonfig.Color)); //Color := Ini.ReadInteger('Farben',' i ', frmKonfig.Color); //frmKonfig.Color := Color; finally Ini.Free; end; end;
Delphi-Quellcode:
kann mir einer bitte eine gute lösung vorschlagen ggf. ein beispiel geben?
´procedure TfrmKonfig.btnSpeichernClick(Sender: TObject);
begin Color := ButtonColor1.SymbolColor; SaveColorSettings(); end; |
AW: Farbe speichern und wiedergeben
Zitat:
Wieso ' i ' mal mit Leerzeichen, mal ohne? |
AW: Farbe speichern und wiedergeben
|
AW: Farbe speichern und wiedergeben
Zitat:
Ich hoffe i sollte nicht i : Integer sein... |
AW: Farbe speichern und wiedergeben
nein i steht nicht für integer
|
AW: Farbe speichern und wiedergeben
@Rippo
TColor ist zwar nicht Integer, passt aber mit 4 Byte in den Integer. Somit ist das kein Problem:
Delphi-Quellcode:
.
ShowMessage(IntToStr(Color));
Viel problematischer ist dagegen das:
Delphi-Quellcode:
und das
Ini.WriteInteger('Farben', ' i ', frmKonfig.Color);
Delphi-Quellcode:
.
Ini.ReadString('Farben', 'i', frmKonfig.Color)
TIniFile ist toll und einfach, birgt aber Gefahren. Man sollte sich hüten die Bezeichnungen für Sections und Idents direkt jedes Mal aufs neue in die Funktion direkt einzutragen. Das birgt Gefahren sich zu verschreiben. Es mal so, mal so zu schreiben. Besser ist eine globale Konstante. Auch den Pfad sollte man in eine Funktion auslagern, damit die Pfade sich nicht unterscheiden. Auch wenn ich nicht glaube, dass das der Fehler ist, hast du das Ident mal als
Delphi-Quellcode:
und mal als
'i'
Delphi-Quellcode:
geschrieben (vor und nach i sind Leerzeichen). Ich weiß nicht ob TIniFile die Namen trimmt, aber beide Idenst sind nicht gleich.
' i '
|
AW: Farbe speichern und wiedergeben
Zitat:
Delphi-Quellcode:
wobei diese Variablen als TColor deklariert sind:
GLD.FarbeBrowse := DatMod.Qset_Benutzer.FieldByName('FARBEBROWSE').AsInteger;
GLD.FarbeEdit := DatMod.Qset_Benutzer.FieldByName('FARBEEDIT').AsInteger; GLD.FarbeAppend := DatMod.Qset_Benutzer.FieldByName('FARBEAPPEND').AsInteger;
Delphi-Quellcode:
Du siehst: TColor ist praktisch ein Integer, da voll zuweisungskompatibel.
Var
FarbeBrowse, FarbeEdit, FarbeAppend : TColor; |
AW: Farbe speichern und wiedergeben
Delphi-Quellcode:
AColor := TColor(Ini.ReadInteger('Section', 'Ident', Integer(clWhite)));
.. Ini.WriteInteger('Section', 'Ident', Integer(AColor)); |
AW: Farbe speichern und wiedergeben
@Bjoerk
Kann man machen und eigentlich sollte man es so machen. Sollte aber auch ohne die Umwandlung funktionieren. Aber wo wir schon mal da sind, ich mach das i.d.R. so mit dem Laden der Farbe aus der Ini:
Delphi-Quellcode:
Hier wird beim Fehler keine andere Farbe zugewiesen, sondern bleibt gleich wie vorher.
AColor := TColor(Ini.ReadInteger('Section', 'Ident', Integer(AColor)));
//... |
AW: Farbe speichern und wiedergeben
Color ist ein int32. Deshalb kann man sich gelegentlich den Cast schenken. Eigentlich LongInt.
Welchem Fehler? Bleiben tut da gar nix? Ist der Key nicht vorhanden wird Default verwendet. Ist der Key da, aber der Value nicht da oder fehlerhaft gibt es normalerweise eine Exception (Intern StrToInt). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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