Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Farbe speichern und wiedergeben (https://www.delphipraxis.net/185064-farbe-speichern-und-wiedergeben.html)

Rippo 12. Mai 2015 13:17

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:
´procedure TfrmKonfig.btnSpeichernClick(Sender: TObject);
 begin
    Color := ButtonColor1.SymbolColor;
    SaveColorSettings();
 end;
kann mir einer bitte eine gute lösung vorschlagen ggf. ein beispiel geben?

uligerhardt 12. Mai 2015 13:26

AW: Farbe speichern und wiedergeben
 
Zitat:

Zitat von Rippo (Beitrag 1301197)
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:
´procedure TfrmKonfig.btnSpeichernClick(Sender: TObject);
 begin
    Color := ButtonColor1.SymbolColor;
    SaveColorSettings();
 end;

Wie "klappt nicht"? Wenn du mit ini.WriteInteger speicherst, sollte ini.ReadInteger zum Lesen funktionieren.

Wieso ' i ' mal mit Leerzeichen, mal ohne?

baumina 12. Mai 2015 13:28

AW: Farbe speichern und wiedergeben
 
Ich würde ColorToString und StringToColor verwenden.

Mavarik 12. Mai 2015 13:57

AW: Farbe speichern und wiedergeben
 
Zitat:

Zitat von Rippo (Beitrag 1301197)
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;

Hast Du uns nur einen Teil Source gepostet..?

Ich hoffe i sollte nicht i : Integer sein...

Rippo 12. Mai 2015 13:58

AW: Farbe speichern und wiedergeben
 
nein i steht nicht für integer

Popov 12. Mai 2015 14:23

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:
Ini.WriteInteger('Farben', ' i ', frmKonfig.Color);
und das
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:
'i'
und mal als
Delphi-Quellcode:
' i '
geschrieben (vor und nach i sind Leerzeichen). Ich weiß nicht ob TIniFile die Namen trimmt, aber beide Idenst sind nicht gleich.

Perlsau 12. Mai 2015 19:19

AW: Farbe speichern und wiedergeben
 
Zitat:

Zitat von Popov (Beitrag 1301213)
TColor ist zwar nicht Integer, passt aber mit 4 Byte in den Integer. Somit ist das kein Problem:
Delphi-Quellcode:
ShowMessage(IntToStr(Color));
.

Selbstverständlich kann man TColor auch einen Integer zuweisen, schließlich mache ich das seit Jahr & Tag ganz genau so, um diverse Farbeinstellungen aus der Datenbank zu lesen:
Delphi-Quellcode:
  GLD.FarbeBrowse     := DatMod.Qset_Benutzer.FieldByName('FARBEBROWSE').AsInteger;
  GLD.FarbeEdit       := DatMod.Qset_Benutzer.FieldByName('FARBEEDIT').AsInteger;
  GLD.FarbeAppend     := DatMod.Qset_Benutzer.FieldByName('FARBEAPPEND').AsInteger;
wobei diese Variablen als TColor deklariert sind:
Delphi-Quellcode:
Var
  FarbeBrowse,
  FarbeEdit,
  FarbeAppend  : TColor;
Du siehst: TColor ist praktisch ein Integer, da voll zuweisungskompatibel.

Bjoerk 12. Mai 2015 19:33

AW: Farbe speichern und wiedergeben
 
Delphi-Quellcode:
  AColor := TColor(Ini.ReadInteger('Section', 'Ident', Integer(clWhite)));

  ..

  Ini.WriteInteger('Section', 'Ident', Integer(AColor));

Popov 12. Mai 2015 20:18

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:
AColor := TColor(Ini.ReadInteger('Section', 'Ident', Integer(AColor)));
//...
Hier wird beim Fehler keine andere Farbe zugewiesen, sondern bleibt gleich wie vorher.

Bjoerk 12. Mai 2015 20:43

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 17:46 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz