Delphi 自带一个 StringToAlphaColor ,我重新实现了一个自己的版本,定义为 ParseColor,区别就不说了,自己看。
function ParseColor(const S: String; ADefColor: TAlphaColor): TAlphaColor;
var
p: PWideChar;
V: Integer absolute Result;
ARGB: TAlphaColorRec absolute Result;
begin
if Length(S) > 0 then
begin
p := Pointer(S);
if ((p^ >= 'a') and (p^ <= 'z')) or ((p^ >= 'A') and (p^ <= 'Z')) then
// #AARRGGBB
begin
if not IdentToAlphaColor('cla' + S, V) then
Result := ADefColor;
end
else if (p^ = '#') or (p^ = 'x') or (p^ = '$') or (p^ = 'H') then
begin
if Length(S) = 7 then // #RRGGBB?
begin
Inc(p);
if TryStrToInt('$'+p, V) then
ARGB.A := 255
else
Result := ADefColor;
end
else if Length(S) = 9 then // AARRGGBB
begin
Inc(p);
if not TryStrToInt('$'+p, V) then
Result := ADefColor;
end
else
Result := ADefColor;
end
else
Result := ADefColor;
end
else
Result := ADefColor;
end;
