![]() |
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). |
AW: Farbe speichern und wiedergeben
Zitat:
In deinem Code ist kein Fehler, das wollte ich nicht sagen, das ist nur ein Tipp aus der Praxis für die Praxis. Vielleicht wird so klarer was ich meine:
Delphi-Quellcode:
Man muss keinen Defaut-Wert zuweisen, man nimmt den Default-Wert aus der Variable der man zuweisen will. Ist ein Wert in der Ini, wird der genommen, ansonsten bleibt er der alte.
Panel1.Color := TColor(Ini.ReadInteger('Section', 'Ident', Integer(Panel1.Color)));
... |
AW: Farbe speichern und wiedergeben
[QUOTE=Popov;1301273]
Zitat:
|
AW: Farbe speichern und wiedergeben
Zitat:
|
AW: Farbe speichern und wiedergeben
Den feinen Unterschied merkt man hier:
Delphi-Quellcode:
ShowMessage(ColorToString(clWhite));
ShowMessage(IntToStr(clWhite)); ShowMessage(ColorToString(clWindowText)); ShowMessage(IntToStr(clWindowText)); |
AW: Farbe speichern und wiedergeben
Zitat:
|
AW: Farbe speichern und wiedergeben
Zitat:
ShowMessage(ColorToString(clWhite)); -> clWhite ShowMessage(IntToStr(clWhite)); -> 16777215 ShowMessage(ColorToString(clWindowText)); -> clWindowText ShowMessage(IntToStr(clWindowText)); -> -16777208 Da TColor folgendermaßen definiert ist
Delphi-Quellcode:
also alles wie zu erwarten.
type TColor = -2147483648..2147483647;
Ich muss gestehen, dass ich aber auch meist einfach direkt den Interger-Wert abspeichere. Grüße |
AW: Farbe speichern und wiedergeben
Zitat:
|
AW: Farbe speichern und wiedergeben
Ist das nicht völlig Wurst, wie man es speichert?
Eine INI-Datei manuell zu verändern sollte nicht Sache eines "dummen" Anwenders sein. Also hantieren nur "Fachleute" damit. Im aktuellen Beispiel: Was steht denn drin, wenn ich keine Standard-Farben nehme und die String-Variante verwende? Vermutlich auch wieder Zahlen. Für die Handhabung innerhalb des Programms ist es egal, ob da Strings oder Zahlen sind. Die Farben werden richtig gesetzt. Der Vorteil von Zahlen ist dabei, dass die immer umgesetzt werden können. Zumindest, solange diese im Integer-Bereich sind. Strings sind zwar lesbarer, aber bei manueller Änderung können kleine Tipp-Fehler evtl. sogar eine Exception auslösen (habe ich jetzt nicht extra geprüft). OK, das kann man sicher auch im Programm abfangen. Ein Tippfehler bei einer Zahl, hat höchstens einen belustigenden Effekt. Ich werde daher weiterhin Farben als Zahlenwert speichern. Aber jeder, wie er mag. :wink: |
AW: Farbe speichern und wiedergeben
Zitat:
|
AW: Farbe speichern und wiedergeben
Mir stellt sich nun aber eine andere Frage:
Hat der TE inzwischen sein "Problem" gelöst und was hat "beim Laden nicht geklappt"? |
AW: Farbe speichern und wiedergeben
Zitat:
![]() ![]() ![]() |
AW: Farbe speichern und wiedergeben
Habs gelöst
ich hab übesehen das die procedure ganz unten war und hab die LoadColorSettings in OnShow gemacht jetzt gehts |
AW: Farbe speichern und wiedergeben
Andere Frage zu TButtonColor
Wenn ich die farbe auswähle, wie schaffe ich es das sich diese Farbe auf die anderen Formulare überträgt und abgespeichert wird? und beim laden diese ausgwählte farbe erscheint?
Delphi-Quellcode:
procedure TfrmKonfig.ButtonColor1Click(Sender: TObject);
begin Color := ButtonColor1.SymbolColor; end;
Delphi-Quellcode:
//Farbe Speichern
procedure TfrmKonfig.SaveColorSettings; const IniName = 'C:\Color.ini'; var Ini: TIniFile; Color : Integer; begin Ini := TIniFile.Create(IniName); try Ini.WriteInteger('Farben', 'Ident', Color); finally Ini.Free; end; end; // Farbe wiedergeben procedure Tfrmkonfig.LoadColorSettings; const IniName = 'C:\Color.ini'; var Ini: TIniFile; Color : Integer; Begin Ini := TIniFile.Create(IniName); try Color := TColor(Ini.ReadInteger('Farben','Ident', Color)); //frmKonfig.Color := TColor(Ini.ReadInteger('farben', 'Ident', Color)); finally Ini.Free; end; end;
Delphi-Quellcode:
procedure TfrmKonfig.btnSpeichernClick(Sender: TObject);
begin Color := ButtonColor1.SymbolColor; SaveColorSettings; end;
Delphi-Quellcode:
procedure TfrmKonfig.FormShow(Sender: TObject);
begin LoadColorSettings; end; |
AW: Farbe speichern und wiedergeben
Zum Beispiel so. Für jede Form eine ander Section wählen. In FormCreate load und in FormDestroy Save ausführen.
Delphi-Quellcode:
function LoadFormColorFromIniFile(const FileName, Section: string): TColor;
procedure SaveFormColorToIniFile(const FileName, Section: string; const Color: TColor); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 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