TColor statt Integer kommt wohl etwas besser
Code:
type tSysColorRec = record
Value : [color=#ff0000]TColor[/color];
Name : String;
end;
hmmm, stimmt, GetSysColor nimmt ja nur den Index entgegen und nicht (wie ich mir da wohl irgendwie dachte) die Farbkonstanten
wird bei dir immer ein TColor als
RGB übergeben?
wenn nicht, also falls auch mal z.B. Konstanten übergeben werden, wäre es noch gut erstmal den übergebenen Color-Wert in
RGB umzuwndeln.
ColorToRGB ... z.B.:
Delphi-Quellcode:
Function ColorToRGB(Color: TColor): TColor;
Var _Color: TColorRec Absolute Color;
Begin
If _Color.Palette = cpSystemColor Then Result := GetSysColor(Color and $FF) and $FFFFFF
Else If _Color.Palette in [cpSystemPalette..cpLogicalPalette] Then Result := Color and $FFFFFF
Else Result := $000000;
End;
Delphi-Quellcode:
function TColorPicker.Color2ConstName(Color: TColor): String;
...
begin
if (Color and $ff000000 = $ff000000) then begin
Result := SysColorArray[Color and $1f{$ff}].Name;
end else begin
//Color := ColorToRGB(Color); // Systemfarbkonstanten wurden schon abgefangen
// die Restlichen Farbpaletten sollte nicht stören
if not ColorToIdent(Color, Result) then Result := GetSysColorString(Color);
end;
end;