AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Farben in DB speichern & bei Programmlauf wieder einlesen
Thema durchsuchen
Ansicht
Themen-Optionen

Farben in DB speichern & bei Programmlauf wieder einlesen

Ein Thema von DietmarB · begonnen am 28. Apr 2009 · letzter Beitrag vom 29. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
DietmarB

Registriert seit: 28. Apr 2009
3 Beiträge
 
Delphi 2005 Professional
 
#1

Farben in DB speichern & bei Programmlauf wieder einlese

  Alt 28. Apr 2009, 19:08
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)
Angehängte Dateien
Dateityp: zip farben_155.zip (515,5 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: Farben in DB speichern & bei Programmlauf wieder ein

  Alt 28. Apr 2009, 19:18
Hallo und Willkommen in der DP ,

ich würde die Farben nicht als Strings, sondern als Integers abspeichern (intern ist das ja auch nichts anderes).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Farben in DB speichern & bei Programmlauf wieder ein

  Alt 28. Apr 2009, 19:46
Nach der testphase wùrde ich das auch als smallint speichern.Fùr Testzwecke spricht aber nichts gegen clRed + Co als strings
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#4

Re: Farben in DB speichern & bei Programmlauf wieder ein

  Alt 28. Apr 2009, 19:57
Hallo,
der Fehler liegt in der Zuweisung der Farbe im FormShow-Ereignis:
benutze : Panel1.Color := StringToColor(Color1);
und die Sache funktioniert
Markus H.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Farben in DB speichern & bei Programmlauf wieder ein

  Alt 28. Apr 2009, 20:08
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Farben in DB speichern & bei Programmlauf wieder ein

  Alt 28. Apr 2009, 20:23
Aber imho nicht zum testen.Ich wùrde notfalls strings in kauf nehmen und später die DB richtig zusammenbauen
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#7

Re: Farben in DB speichern & bei Programmlauf wieder ein

  Alt 28. Apr 2009, 20:24
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: 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]
Markus H.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

Re: Farben in DB speichern & bei Programmlauf wieder ein

  Alt 28. Apr 2009, 20:25
Zitat von Hansa:
Aber imho nicht zum testen.
Und wieso nicht? Ich kann Dir da nicht ganz folgen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DietmarB

Registriert seit: 28. Apr 2009
3 Beiträge
 
Delphi 2005 Professional
 
#9

Re: Farben in DB speichern & bei Programmlauf wieder ein

  Alt 28. Apr 2009, 20:47
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;

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 !!!


[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

Re: Farben in DB speichern & bei Programmlauf wieder ein

  Alt 28. Apr 2009, 20:52
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 Code ), dann ist er besser zu lesen und die Formatierung/Einrückung bleibt auch erhalten [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr.
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