Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Farben in DB speichern & bei Programmlauf wieder einlesen (https://www.delphipraxis.net/133253-farben-db-speichern-bei-programmlauf-wieder-einlesen.html)

DietmarB 28. Apr 2009 18:08


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)

DeddyH 28. Apr 2009 18:18

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).

Hansa 28. Apr 2009 18:46

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

markus5766h 28. Apr 2009 18:57

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

Medium 28. Apr 2009 19:08

Re: Farben in DB speichern & bei Programmlauf wieder ein
 
Zitat:

Zitat von Graphics.pas
TColor = -$7FFFFFFF-1..$7FFFFFFF;

Und das entspricht ziemlich genau:
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.

Hansa 28. Apr 2009 19:23

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

markus5766h 28. Apr 2009 19:24

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:
const
PanelColor : array[1...10] of Color = (Farbe1, Farbe2, ... Farbe10);
aufgerufen mit:
Delphi-Quellcode:
Panel1.Color := PanelColor[i];// i : Integer (1...10)
dies hätte auch noch den Vorteil, dass nur vordefinierte Farben benutzt werden können.
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]

DeddyH 28. Apr 2009 19:25

Re: Farben in DB speichern & bei Programmlauf wieder ein
 
Zitat:

Zitat von Hansa
Aber imho nicht zum testen.

Und wieso nicht? Ich kann Dir da nicht ganz folgen.

DietmarB 28. Apr 2009 19:47

Re: Farben in DB speichern & bei Programmlauf wieder ein
 
Hallo Freunde,

es ist gelungen !

Delphi-Quellcode:
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;
:dancer:
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]

DeddyH 28. Apr 2009 19:52

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:
Code
), dann ist er besser zu lesen und die Formatierung/Einrückung bleibt auch erhalten ;) [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 Uhr.
Seite 1 von 2  1 2      

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