支持#RRGGBB样式的Web字符串颜色格式的颜色值和TColor之间进行相互转换,从Web颜色格式转换为TColor类型的值时,支持省略前面的#号。
type TRGBAColor = record case Integer of 0: (Red, Green, Blue, Alpha: Byte); 1: (Color: TColor); end; //从TColor到Web颜色格式 function FormatWebColor(AColor: TColor): String; var ARef: TRGBAColor absolute AColor; begin Result := '#' + IntToHex(ARef.Red, 2) + IntToHex(ARef.Green, 2) + IntToHex(ARef.Blue, 2); end; //从Web颜色格式转换为TColor function FromWebColor(const S: String): TColor; var p: PWideChar; R, G, B: Integer; begin p := PWideChar(S); if p^ = '#' then Inc(p); Result := clNone; if TryStrToInt('$' + Copy(p, 0, 2), R) then begin Inc(p, 2); if TryStrToInt('$' + Copy(p, 0, 2), G) then begin Inc(p, 2); if TryStrToInt('$' + Copy(p, 0, 2), B) then Result := RGB(R, G, B); end; end; end;
用法当然足够简单,如 FromWebColor(‘#FF0000’)直接就是红色,FormatWebColor(clRed)得到的结果就是字符串#FF0000。