Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8541
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 07.08.18 10:44 
Ich räume grade in einem Projekt etwas auf, in dem einige Altlasten drin sind. Und einen Punkt verstehe ich da nicht. :gruebel:

In einer Ini-Datei habe ich diverse Farben gespeichert, die ich mit Hilfe von StringToColor in einen TColor-Wert übersetze. Die Werte habe ich damals (meine ich zumindest) über einen TColorDialog im Programm ausgewählt und dann abgespeichert. Das kann ich aber nicht mehr sicher sagen, weil dieser Auswahl-Teil mittlerweile aus dem Programm entfernt wurde.

Das Problem ist: Ich verstehe die Werte in den alten Ini-Dateien nicht und kriege dann Probleme, wenn ich einzelne Farben ändern will.

Da ist z.B. der Wert $ff00000D. Das ergibt einen Blauton (warum auch immer). Wenn ich den Wert "leicht abändere" auf $ff00000E, dann ist das Ergebnis weiß (mehr oder weniger), und bei $ff00000C ein mittleres grau.

Kann man auch schnell nachbauen mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Edit1Change(Sender: TObject);
begin
    try
        Label1.Font.Color := StringToColor(Edit1.Text);
    except

    end;
end;


Klar, der Fehler liegt irgendwie in dem führenden FF, das wohl den Alphakanal beinhaltet, und der Typdefinition von TColor = -$7FFFFFFF-1..$7FFFFFFF;. Das passt irgendwie nicht.

Aber wie kommen diese Farbwerte dann zustande, die ich da beobachte? Und hat jemand eine Theorie, warum ich damals so viele Farben in dieser Form abgespeichert habe und nicht als BGR-Werte (ohne alpha) wie $00ff00 für "Grün"? Hat sich da irgendwann was geändert bei der Farbverwaltung in Delphi?

Edit: Hat sich erledigt. Diese Farbwerte sind die Systemfarben.
ausblenden Delphi-Quelltext
1:
2:
3:
COLOR_HIGHLIGHT = 13// Unit Windows
clSystemColor = $FF000000// Unit Graphics
clHighlight = TColor(clSystemColor or COLOR_HIGHLIGHT); // = $ff00000D

Wollte ich zwar damals bestimmt nicht so haben, aber jetzt ist mir die Ursache für den Murks in den Inifiles klar.

_________________
We are, we were and will not be.